AdobeActionScript

  1. 概要


    1. 特徴

       Action スクリプト3.0はFlash アプリケーションの機能を表現するスクリプト言語です。手操作でシンボルを配置する変わりに、プログラムでシンボルの配置や変化を設定できます。

    2. 記述機能

       全体として、Java 似たの記述形式です。図形の定義や動画の制御だけでなく、クラスの定義やイベントの処理(リスナ)、さらには、正規表現やxmlの処理機能まで盛り込まれています。

  2. プロジェクトの作成


    1. 生成

      AdobeFlasaCS3Professionalを使用します(XP以降、メモリ1GB以上必要)。

    2. プロジェクト生成

      プロジェクトは fla 型ファイルに生成される。テキストエディタではスクリプトは見えません。クラスファイルは as 型でこれは UTF8 対応のエディタ(V0.91 TeraPAD)で読める。

    3. タイムライン

       タイムラインのキーフレームとして、スクリプトを作成します。アクションウインドウを開き、キーフレームを選択してフレームアクションを編集します。フレームアクションはキーフレームを再生するとき一度実行されます。
       変数や関数はタイムラインで共通ですが、変数の値はタイムラインに沿って実行されます。フレーム10で値を設定する場合、フレーム10までは値は設定されません。

    4. 実行

      プロジェクトウインドウのデバッグで実行できます。 .swf ファイルが生成され、表示されます。

    5. 表示

       ステージに表示するには DisplayObject を作成します。表示するにはこれを ステージに対応する DisplayObjectContainer にaddChild()関数で追加します。通常、タイムラインがすべてのオブジェクトの root になります。

  3. スクリプトの文法


    1. コメント、変数、データ型、式

      大文字と小文字は区別します。
      //comment
      var a:int,b:int;
      a=1;b=2;
      trace(a,b);

      基本データ型は、 Boolean,int,uint,Number,String です。その他のデータ型には、Array、Date、Error、Function、Object などがあり、代入は 参照子 となります。
       演算子は Java言語 とほぼ同じです。ただし、 === (値もデータ型も等しい)などの比較演算やXML演算もあります。

    2. 定数、文字列


      const VER:String = "v1.23";
      const PEN_COLORS:Array = new Array("green","red");
      var msg:String = "色は\"赤\"です";
      var yen:String = "\u00A5";
      \u は ユニコード の文字を定義します。

    3. 配列

       配列は Perl と同じくリスト構造のようです。多次元の配列も利用できます。配列の要素の個数は 配列名.length で取得できます。ランダムなアクセス演算子 [式 ] が利用できるほか 先頭、末尾に 追加/取り出す 関数として、 unshift, shift,push,pop が利用できます。.
       
    4. 関数

       一般系は次のようです。値を返さない場合、関数のデータ型は void になります。
          function 関数名( 引数:データ型。。。。):関数のデータ型{     }

    5. 分岐、繰り返し 

      条件分岐は、if else の構文ですが、範囲を示す {..} は必須です。
       if ( 条件式 ) { .. } else { .. }
      繰り返しは、for、と while が利用できます。
       配列の各要素に対して処理をするには、forEach が利用できます。

  4. サンプル


    1. 円を描く

      Spriteクラスのオブジェクトとして塗りつぶしの円を定義

      //circle.fla
      var circle1:Sprite = new Sprite();
      
      circle1.graphics.beginFill(0xCCCC00);
      circle1.graphics.drawCircle(50,50,40);
      
      addChild(circle1);



    2. マウスイベント処理

      二つのスプライトのオブジェクトを生成する
      クリックした図形が先に描画される
      //MouseEvent.fla
      
      var container:Sprite = new Sprite();
      addChild(container);
      
      var circle1:Sprite = new Sprite();
      circle1.graphics.beginFill(0xCCCC00);
      circle1.graphics.drawCircle(50,50,40);
      circle1.graphics.endFill();
      
      var box:Sprite = new Sprite();
      box.graphics.beginFill(0x00CCDD);
      box.graphics.drawRect(40,60,100,100);
      box.graphics.endFill();
      
      container.addChild(circle1);
      container.addChild(box);
      
      container.addEventListener(MouseEvent.CLICK,clicked);
      
      function clicked(event:MouseEvent):void {
              container.setChildIndex(DisplayObject(event.target),0);
      }

      四角をクリック


    3. クラス宣言

      .as ファイルに package 宣言してクラス定義します
      //flowerpaper.as
      
      package {
      
              import flash.display.DisplayObjectContainer;
              import flash.display.MovieClip;
      
              public class FlowerPaper {
                 var my_container:DisplayObjectContainer;
                 var ClassReference:Class;
      
                 //コンストラクタ
                 function FlowerPaper(container:DisplayObjectContainer) {
                              my_container = container;
                              makeMC();
                 }
      
                 //インスタンスを100個作る
                 function makeMC():void {
                              var mc:MovieClip;
                              var stageW:uint = my_container.stage.stageWidth;
                              var stageH:uint = my_container.stage.stageHeight;
                              var i:uint;
      
                              for (i=1; i <= 500; i++) {
                                      //Flowersシンボルからインスタンスを作る
                                      mc=new Flowers();
                                      //ステージに散りばめる
                                      mc.x=getRandom(stageW);
                                      mc.y=getRandom(stageH);
                                      //スケールを1?1.5倍
                                      mc.scaleX = mc.scaleY = 0.5+getRandom(5)*0.1;
                                      //任意のフレームを表示する
                                      mc.gotoAndStop(getRandom(mc.totalFrames));
                                      //表示
                                      my_container.addChild(mc);
                              }
                      }
      
               //乱数を返す(1?v)
               function getRandom(v:uint):uint {
                  return Math.ceil(Math.random() * v);
               }
      
            }
      }

      メイン

      クラス定義されたオブジェクトを生成
      var flowerObj:FlowerPaper = new FlowerPaper(this);

      実行画面