既存のプロジェクトを Flash 7/AS2 から Flex/AS3 に移行するための最良のアプローチは何ですか?

StackOverflow https://stackoverflow.com/questions/46136

質問

Flash 7 をターゲットとした大規模なコードベースがあります。 多く AS2 クラスの。新しいプロジェクトで Flex を使用できるようになることを願っていますが、ロードマップの新しい要素の多くは古いコードへの追加です。

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

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

役に立ちましたか?

解決

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

パッケージの命名

class your.package.YourClass
{
}

になる

package your.package
{
    class YourClass
    {
    }
}

インポートが必要です

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

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

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

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

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

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

上でこれについてほのめかしましたが、それは今です flash.display.ムービークリップ ただの代わりに ビデオクリップ、 例えば。このカテゴリには詳細がたくさんあり、すべてを見つけるには十分ではありませんでしたが、ここでは多くの煩わしさがあるでしょう。

結論

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

他のヒント

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

私がやりたいことの一つは、 Adobe の移行ガイド (これは基本的に、変更された内容を項目別に示したリストです) 項目ごとに確認し、単純な検索と置換操作 (おそらく正規表現を使用) で各項目を変更できるかどうか、または出現箇所を手動で編集する方が簡単かどうかを判断してください。 AS3に対応します。おそらく多くの場合 (特に、あなたが言ったように、移行するコードの量が非常に多い場合)、変更をスクリプト化するのが最善です (つまり、正規表現の検索と置換を使用して)、自動変更が失敗した境界ケースを手動で修正します。

少しのデバッグやいくつかのテスト ケースの実行のために時間を確保する準備をしてください。

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

AS2 から AS3 に移行するための追加の参考資料をいくつか示します。

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

リー・ブリメロウ:ActionScript 3 を学ぶ 6 つの理由http://www.adobe.com/devnet/actionscript/articles/six_reasons_as3.html

コリン・ムック:Essential ActionScript 3 (ActionScript 開発者にとっての「バイブル」と考えられています):http://www.amazon.com/Essential-ActionScript-3-0/dp/0596526946

マイク・チャンバー

メッシュ@adobe.com

私の経験では、AS3 に移行する最善の方法は 2 段階に分けて行うことです。1 番目は構造的な面、2 番目は構文的な面です。

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

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

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

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

最後にもう 1 つ注意してください。少なくとも自動化するまでは、import ステートメントや override ステートメントなどについてはまったく心配しません。どれかが欠けている場合は、コンパイラによって検出されます。しかし、構造的な問題を見逃してしまうと、さらに大きな痛みを伴うことになります。

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

ただし、知識の点で as2 から as3 に移行するのは非常に簡単です。オブジェクト指向 as2 を知っていれば、as3 に進むことはまったく問題ありません。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top