2008年3月28日 (金)

Java から ActionScript3 に変換

先日公開した、JavaからActionScript3へのソースコード変換ソフト「Java To ActionScript3 Converter」を使って変換した結果を、手作業で最終的に変換するために必要なよくある作業を書き留めておきます。
※この記事は随時更新していきます。

■オーバーロードをまとめる(同名のメソッドを一つに合体する)

Javaは同じ名前のメソッドを複数持てますが、AS3では同じ名前のメソッドおよびコンストラクタを持てません。
代わりにAS3では、引数にデフォルト値を持たせることができるので、Javaの複数メソッドを一つにまとめることが可能です。

・コンストラクタを、うまく1つにできない場合は「public static function createA( 引数 ):A 」というスタティックメソッドにするなどの方法が考えられます。

・メソッドを、1つにできない場合は「getXxx() , getXxxAt()」のように名前を変えるなどの方法が考えられます。


■スコープごとに定義された同名の変数を...

Javaでは、スコープごとに変数を定義できますが、AS3ではスコープ内に定義した変数もメソッド全体で参照できてしまいます。このため、AS3では「変数定義が重複している」という警告になります。

//Javaの場合
 for( 略 ){ int t = 0 ; }
 for( 略 ){ int t = 0 ; }//もう一度 t を使っても Java では問題なし

 //ActionScript3の場合
 for( 略 ){ var t:int = 0 ; }
 for( 略 ){ var t:int = 0 ; }//ActionScript3では、重複定義という警告になる

この警告は放置しても直接的な問題はありませんが(*1)、私は念のためそろぞれの変数名を手作業で変えて使っています。

*1. ActionScript3では、メソッド内で再度同じ変数を定義しても、前の変数が使いまわされるため予期せぬ動作になりえる可能性がありますが、Javaから移植した場合、ローカル変数は参照前に値が初期化されていないとエラーになるため、使用前に毎回値がリセットされているはずです。しかし、やはり別の変数を再定義する方が無難だと思われます。


■メソッドオーバーライド

オーバーライドするときは、サブクラス側のメソッドに override をつける。

  public override function someMethod( ) : void {


■staticの初期化

Javaの static{ 初期化処理.. } による初期化は、ActionScript3では、初期化処理..をクラス内のメソッドの外に直に記述すればよい模様。※この部分は次回バージョンアップで対応予定

  public class A {
    trace("ここに初期化を直に書ける") ;

  }


(随時更新予定)

3月 28, 2008 ActionScript, Java | | コメント (0) | トラックバック (0)

2008年3月20日 (木)

JavaからActionScript3への変換ツール公開

先月、Live2DをFlashに移植しはじめて半日ほどたった時点で、文法の細々とした違いに発狂しそうになり勢いあまって作ったソースコードのコンバータです。

ライブラリ等は一切変換しませんので、自力でなんとかしていただく必要があります。

パッケージ、メソッド宣言、変数宣言、キャストなどの文法の違いについては、ほぼ問題なく変換できます。

~・~・~・~

思い突きから配備まで延べ3日で作ったシロモノですので、過度の期待はクレグレも禁物です!!

では、良かったら使ってみてください。

http://www.piclet.jp/a_j2as3/

さあ!Java&Flash好きなあなた!
Silverlightの追撃をかわすためにガンガン移植していきましょう!

※あまり眠ていないので、ハイテンションになってしまいました。

3月 20, 2008 ActionScript, Java | | コメント (0) | トラックバック (0)