本「ActionScript 3.0 アニメーション」を読みます。
- 作者: KeithPeters
- 出版社/メーカー: ボーンデジタル
- 発売日: 2007-10-30
- メディア: 単行本
最初から丁寧に読んだりすると最期まで続かないことが多いので、大事なとこ以外は読み飛ばすことにします。最後までやりたいので。
メタデータ
http://d.hatena.ne.jp/itouhiro/20111004 で作ったソースコードに「メタデータ」を加えました。これは
ActionScriptステートメントではなく、コンパイル時にコンパイラが使用するステートメントからなります。SWFメタデータタグを使うと‥‥次のように設定できます。
この行は、package内のクラス定義の直前に記述します。
[SWF(backgroundColor="0xffff00", width="320",height="180", frameRate="15")]
これを記述すると、作るswfの形式を指定できます。ここでは「背景色を#FFFF00, swfの横幅を320px, 縦の高さを180px, 画面書き換えを1秒15コマ」と指定。
イベントハンドラ
EventHandlerとして この本では onMouseDown のような「on〜」関数名を使うと書いてあるが、それはよくないようです。
(訳者注):本書のサンプルコードを実行すると‥‥警告が表示されますが、それは本書で使用しているハンドラ名がAS2.0で使用されていたものと同じ名前であるからです。たとえば‥‥のようなAS2.0で使用されていなかった名前に変更することで、警告の表示はなくなります。
じゃあEventHandler関数名はどう名付ければいいか?
『ActionScript 3.0 コーディング規約の日本語訳』
http://www.trick7.com/blog/2008/03/14-131809.php#CodingConventions-Eventhandlernames
によると
イベントタイプ名称に “Handler” をくっつけた名前にします。例:mouseDownHandler()
なるほど。
それではEventHandler使ったソースを書いてみます。
package { import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; //←必要。FlashDevelopが勝手に追加してくれた。 [SWF(backgroundColor="0xfcfcfc", width="320",height="180", frameRate="15")] //←手動で追加した。 /** * ... * @author itouhiro */ public class Main extends Sprite { private var maru:Sprite; //この変数はキャラ「まる」そのもの private var i:int; //数をかぞえるだけの変数 //Constructor この関数はFlashDevelopが最初から用意してくれている public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } //この関数の中身を変更した private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); // new chara maru = new Sprite(); //maruはSpriteクラスから生み出されたインスタンス addChild(maru); //maruを画面表示してもらうため、登録した maru.graphics.beginFill(0xcceecc); //maruの肉体というか画像を描く maru.graphics.drawCircle(0,0,18); maru.graphics.endFill(); // set chara maru.x = stage.stageWidth / 2; //maruをステージの中央に初期配置 maru.y = stage.stageHeight / 2; i = 0; //カウンターを0にリセット maru.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler); //マウスを押したとき呼び出す関数を登録 maru.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler); //マウスを離したとき呼び出す関数を登録 } private function mouseDownHandler(event:Event):void { maru.x += 1; //マウスを押したとき、maruのx座標を変更する } private function mouseUpHandler(event:Event):void { maru.y -= 1; //マウスを離したとき、maruのy座標を変更する } } }
- マウスを押した → 丸が右に移動
- マウスを離した → 丸が上に移動
というそれだけのプログラムですが‥‥動いてます。