6

多くの AS2 クラスを含む、Flash 7 を対象とした大規模なコードベースがあります。新しいプロジェクトで Flex を使用できるようになることを望んでいますが、ロードマップの多くの新しいものは古いコードへの追加です。

AS2 と AS3 の構文は一般的に同じなので、現在のコードベースを Flex/AS3 に移植するのはどれほど難しいのだろうかと考え始めています。UI 関連のものはすべて不確かであることはわかっています (現在、UI は多くの createEmptyMovieClip() および attachMovie() のものを使用して実行時に生成されます)、UI とコントローラー/モデルのものはほとんど分離されています。

AS2 コードの大規模なコードベースを AS3 に移植しようとした人はいますか? どのくらい難しいですか?どのような落とし穴に陥りましたか? この種のプロジェクトを行うためのアプローチに関する推奨事項はありますか?

4

5 に答える 5

6

多数の AS2 クラスを AS3 に変換しようとしたときに見たいくつかの注目すべき問題:

パッケージの命名

class your.package.YourClass
{
}

になる

package your.package
{
    class YourClass
    {
    }
}

インポートが必要です

使用されている外部クラスは明示的にインポートする必要があります。完全修飾名でそれらを参照するだけでは十分ではありません。

インターフェイス メソッドに「public」というラベルを付けることはできません

これは完全に理にかなっていますが、AS2 ではそれが可能であるため、削除する必要がある場合は削除する必要があります。

明示的な「オーバーライド」キーワード

親クラスの関数をオーバーライドする関数は、C# と同様にoverrideキーワードで宣言する必要があります。同じように、他のインターフェイスを拡張して関数を再宣言するインターフェイスがある場合は、それらのオーバーライドを削除する必要があります (パブリックの場合と同様に、この表記法はとにかく意味がありませんが、AS2 ではそれが可能です)。

すべての Flash 組み込み機能が変更されました

上記でこれをほのめかしましたが、たとえば、単なるMovieClipではなく、 flash.display.MovieClipになりました。このカテゴリには多くの詳細があり、すべてを見つけるには十分ではありませんでしたが、ここには多くの煩わしさがあります.

結論

この変換を成功させるまでには至りませんでしたが、overrideキーワードを除くすべての側面を処理する簡単な C# ツールを数時間で作成することができました。インポートの自動化は難しい場合があります。私の場合、使用するパッケージはすべて、いくつかのルート レベルのパッケージで始まるため、簡単に検出できます。

于 2008-09-05T16:15:47.523 に答える
1

eval()まず、AS3には同等のものがないため、プロジェクトで使用していないことを願っています。

私が行うことの1つは、Adobeの移行ガイド(基本的には変更点の項目別リスト)を項目ごとに確認し、単純な検索と置換操作(おそらく正規表現)、またはAS3に対応するようにオカレンスを手動で編集する方が簡単かどうか。おそらく多くの場合(特に、移行するコードの量が非常に多い場合)、変更をスクリプト化して(つまり、正規表現の検索と置換を使用して)、境界のケースを手動で修正するのが最善です。自動変更は失敗しました。

少しのデバッグといくつかのテストケースの実行のために、少し時間を取っておく準備をしてください。

また、他の人がすでに述べたように、AS2SWFとAS3SWFを組み合わせようとするのは良い考えではなく、実際には機能しないため、1つのプロジェクトですべてのコードを一度に移行する必要があります。

于 2008-09-08T22:23:35.303 に答える
1

AS2 から AS3 への移行に関するその他の参考資料を次に示します。

Grant Skinners 入門 AS3 ワークショップのスライド資料 http://gskinner.com/talks/as3workshop/

Lee Brimelow : ActionScript 3 を学ぶ 6 つの理由 http://www.adobe.com/devnet/actionscript/articles/six_reasons_as3.html

Colin Moock : Essential ActionScript 3 (ActionScript 開発者の「バイブル」と見なされます): http://www.amazon.com/Essential-ActionScript-3-0/dp/0596526946

マイク・チェンバーズ

mesh@adobe.com

于 2008-09-15T22:18:07.380 に答える
1

私の経験では、AS3 に移行する最善の方法は 2 つのフェーズに分けることです。最初は構造的に、次に構文的にです。

まず、AS2 のままでリファクタリングを繰り返しますが、可能な限り AS3 アーキテクチャに近づけます。もちろん、これにはすべてのフレーム スクリプトと #include スクリプトをパッケージとクラスに移動することも含まれますが、AS3 フローに従うようにすべてのイベント リスナーとディスパッチャを変更する (イベント タイプの静的クラス プロパティを使用し、メソッドで登録する) など、より微妙なことを行うこともできます。オブジェクトではなく)。また、すべての「組み込み」イベント (onEnterFrame など) を削除し、重要なマウス操作 (ドラッグなど) とキーボード操作 (キーが押されます)。このフェーズは段階的に実行できます。

2 番目のフェーズは、AS2 から AS3 への変換 ("_x" を "x" に変更し、すべての API など) です。これは段階的に行うことはできません。一度にできる限りのことを行ってから、すべてのコンパイル エラーの修正を開始する必要があります。このため、第 1 段階でできることが多ければ多いほど、第 2 段階でより多くの苦痛を避けることができます。

このプロセスはかなり大規模なプロジェクトでうまくいきましたが、最初のフェーズでは AS3 がどのように構成されているかをしっかりと理解する必要があることに注意してください。AS3 を初めて使用する場合は、移植に必要な機能のいくつかを構築してみる必要があるでしょう。たとえば、レガシー コードでドラッグ アンド ドロップ ターゲットを使用している場合、AS3 でそれを実装して、コードの構造をどのように変更する必要があるかを理解する必要があります。それを念頭に置いて AS2 をリファクタリングすると、最終的な構文の変更はスムーズに進むはずです。

私にとって最大の落とし穴は、MovieClip の取り付け、複製、移動、深さの変更などを伴う部分でした。これらすべてを AS3 のように再設計することはできません。すべてを新しい考え方にマッシュアップしてから、バグの修正を開始する必要があります。

最後に 1 つ注意してください - 少なくとも自動化するまでは、import ステートメントや override ステートメントなどについては心配しません。見逃した場合は、コンパイラによってキャッチされます。しかし、構造的な問題を見逃すと、さらに多くの苦痛を味わうことになります。

于 2008-09-16T02:23:37.460 に答える
0

このようなより大きなプロジェクトを as2 から移行することは、単純な検索と置換以上のものになります。新しい構文は (lilserf が述べたように) かなり似ていて、簡単に適応できますが、as3 がより厳密であり、新しいイベント モデルが多くの問題を引き起こす可能性が最も高いという事実は、他に何もありません。おそらく古いコードをガイドとして使用して、ほぼすべてをゼロから書き直すことで、おそらくより良い結果が得られるでしょう。

as2 から as3 への移行は、知識に関してはかなり単純です。オブジェクト指向 as2 を知っていれば、as3 に移行してもまったく問題ありません。

特に必要でない限り、UI に mxml を使用する必要はありません。Mxml は UI (など) を構築するための簡単な方法を提供するだけですが、actionscript を使用して自分でそれを行いたい場合は、何も止めることはありません (既に as2 コードでその UI を持っている場合は、これもおそらく簡単です)。Flex (ビルダー) は、UI の構築やデータのバインドなど、自分でやりたくないことを簡単に行うための方法ですが、基本的には .swf の一部を作成するだけであり、魔法はありません ;)

于 2008-09-12T02:49:05.233 に答える