FC2ブログ
 
■プロフィール

クリエイトウェーブ

Author:クリエイトウェーブ
開発における、諸々を書いていきたいなと思っています。
mail : info@createwave.jp

■最近の記事
■カテゴリー
■最近のコメント
■月別アーカイブ

■最近のトラックバック
■ブログ内検索

■RSSフィード
■リンク
ActionScript3でコンポーネント定義のパラメータを使うには
お疲れ様です。フッチーです。

CS3である処理を考えていて、コンポーネント定義でパラメータを設定しようって事にしました。
・・・・で、いきなり詰まった。
よく考えてみると、ActionScript3上でパラメータ使った事なかったです。

例えば新規シンボルをつくって、ライブラリ上で右クリック
コンポーネント定義を作って、名前(プロパティ名)、値、型宣言を行います。
コンポ1

ここでは、testってプロパティ名で、0という数字をデフォルト値にしてみます。
コンポ2

そうすると、そのシンボルをステージに配置するとパラメータでプロパティ「test」の値を設定ようになります。
コンポ3

ActionScript2の場合は、これで配置されたムービークリップは、プロパティ「test」を予め持っている事になります。
ライブラリ上の1つのムービークリップを、ステージに複数配置する場合に、それぞれ独自の値を持たせる事が出来る訳です。
Directorのビヘイビアの使い方に、似ています。

ActionScript2の場合だと、それぞれ
(ムービークリップインスタンス).test で値が取れるし、リンケージでクラスを定義した場合は
comp3_5.jpg

ここでは、testClassをクラスとして定義したので、このシンボルと「testClass.as」が一体化します。

「testClass.as」の中身
class testClass extends MovieClip
{
    private var test:Number
    function testClass ()
    {
        trace(test);
    }
}

のように、
private var test:Numbe
とプロパティ 「test」を宣言してやれば、そのままAS2クラスの中でtestの値が取れるようになります。

で、ActionScript3のリンケージクラスで、同じように
private var test:Numbe 宣言してみたのですが、駄目でした。まあ想像通りだったのですが・・・

で、どうすればいいの? としばらく格闘して判ったので書いときます。
ActionScript3の場合は、識別子がなくなって、クラスだけを定義します。
コンポ4

ActionScript2の場合は、同じクラスを、複数のムービークリップに一体化させる事ができますが
ActionScript3は、1体1の関係です。
同じクラスを、そのまま他のムービークリップに使う事はできません。

さてActionScript3のコンポーネント定義のパラメータの取り方です。
まずActionScripte3用の「testClass.as」の中身です。

package
{
    import flash.display.MovieClip;
    public class testClass extends MovieClip
    {
        private var _test:Number = 0;
        function testClass():void
        {
            
        }
        
        [Inspectable(defaultValue=0, name="test")]
        public function get test():Number
        {
            return _test;
        }

        public function set test(no:Number):void
        {
            trace( "no : " + no );
            _test = no;
        }
    }
}

どうやらsetterを使って拾うようです。
[Inspectable(defaultValue=0, name="test")]
がパラメータの定義らしいのですか、イマイチ必要なのか判らない・・・
なくても関係なく拾うようです・・・・・要るのかな?

また、デフォルト値の場合は、setterは動きません。
デフォルト値と違う値が設定されるとsetterが動きます。

ActionScript2の時は、コンストラクタで値が拾えましたが、ActionScript3だとコンストラクタはデフォルト値を拾います。
ワンテンポ遅れて、setterが呼び出されるようです。

という事は、ActionScript2でコンストラクタで処理してた事は、ActionScript3の場合は、パラメータ定義で設定しやプロパティのsetterで処理しないといけないのか・・・・

デフォルト値のままだと呼び出されないので、デフォルト値は使わない値にしておいて必ず別の値に設定しないと、ActionScript2の時と同じような処理が出来ないって事なのかな?

テーマ:Flash - ジャンル:コンピュータ

カテゴリー:Flash | TM(0) | CM(0)