« AS3 筆初め | メイン | MovieClassic »

2007年6月 2日

[as3] 警告 Warning: 1090: Migration issue

やたらといろいろ定義しないといけないのが面倒なのと、覚えるのも一苦労しそうなので
AS2 ベースのイベント、メソッドを持ったクラスを作成。

たぶんみんなおんなじようなことはやってるだろうから、探せばどっかにあるんだろうけど
まずは AS3 の仕組みを理解するためにも、もんどりうって作ってみる。

以下はその時の経過をメモ。

クラス内に
public function onEnterFrame():void {}
と書くと
Warning: 1090: Migration issue: The onEnterFrame is not triggered
automatically by Flash Player at run time in ActionScript 3.0.
You must first register this handler for the event using
addEventListener ( 'enterFrame', callback_handler).

と警告されてしまう。
onLoad, onRelease, onPress 等も同様。
public ステートメントを付けると更に上書きもできなくなってしまう。
public var onEnterFrame:Function;
これだと警告は出ない。
でも onEnterFrame や onRelease は定義した直後から自動的にイベントを受け取ってほしいので
public function set onEnterFrame( func:Function ):void
{
    __onEnterFrame = func;
this.addEventListener( Event.ENTER_FRAME, __enterFrameCall ); } public function get onEnterFrame():Function { return __onEnterFrame; } private function __enterFrameCall( e:Event ):void { __onEnterFrame.apply( target , null ); } private var __onEnterFrame:Function;
と書きたい。
でもこれだと同じく警告が出てしまう。

で、Proxy クラスを用いて onEnterFrame プロパティに
無理やり setter , getter を再定義する方法を試みてみる。

override flash_proxy function getProperty( name )
{
    return classicEvent['__'+name];
}
override flash_proxy function setProperty( name, func ):void
{
    var str = name.toString();
    var tmp = str.split('on').join('');
    classicEvent['__'+name] = func;
    classicEvent['__set'+tmp+'Event']();
}

こんな感じに。

でもこれだとどうしても this.onEnterFrame と書くのが難しかった。

いろいろ試行錯誤していると、

public function set onEnterFrame( func:Function ):void
{
    __onEnterFrame = func;
}
private var __onEnterFrame:Function;

getter 無しだと警告が出てなかった。
理由は良く分からない。

でもこれだと onEnterFrame で定義した function を抜き出すことができないので
public function set onEnterFrame( func:Function ):void
{
    __onEnterFrame = func;
}
public function getEnterFrame():Function
{
    return __onEnterFrame;
}
private var __onEnterFrame:Function;
として、中身の取得も可能にする。
これだと警告も出ないし、モーマンタイ。

この調子でいろいろイベントを作成していく。

気にくわないのは onSetFocus の getter の名前が
「getSetFocus」になってしまったこと。

get なんだか set なんだか。。。

トラックバック(0)

このブログ記事を参照しているブログ一覧: 警告 Warning: 1090: Migration issue

このブログ記事に対するトラックバックURL: http://system.seyself.com/mt-tb.cgi/408

コメントする


画像の中に見える文字を入力してください。

しばらく時間が経過すると、システム内部と表示されている文字内容に食い違いが発生するようなので、
投稿する前にページをリロードすることをお勧めします。
リロードしてもフォームの内容は維持されます。