フラッシュをつくる 6

wonderfl build flash online | 面白法人カヤック

import flash.display.Graphics;
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.events.Event;

class FlashTest4 extends Sprite {
    public function new() {
        super();
        //var g = graphics;
        //g.beginFill(0xFFFFFF, 1.0);
        //g.drawRect(0, 0, 465, 465); // <del>塗りつぶさないとマウスイベントが受け取れなかった</del>
        //addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
        //訂正 (2009/03/27)
        flash.Lib.current.stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
    }
    private function mouseDownHandler(e) {
        var ball = new Ball();
        
        ball.x = mouseX;
        ball.y = mouseY;
        
        ball.addEventListener("owata", owataHandler);
        
        addChild(ball);
    }
    private function owataHandler(e) {
        var ball:Ball;
        try ball = cast(e.target, Ball) // キャストして代入。例外が出る。
        catch(e:Dynamic)                // 下の例ような式中の例外は、Flash9では使えない。
            return;                     // var x = try f() catch(e:Dynamic) null;
        
        ball.removeEventListener("owata", owataHandler);
        removeChild(ball);
        ball = null;
    }
    public static function main() {
        flash.Lib.current.addChild(new FlashTest4());
    }
}

class Ball extends Sprite {
    private var yMove:Float;
    private var bound:Int;
    private var grav:Float;
    public function new() {
        super();
        // フィールドの初期化はコンストラクタに書かないとダメらしい。
        yMove = 0;
        bound = 0;
        grav = 0.2;
        var g = graphics;
        // 乱数はIntを返すStd.randomと、Floatを返すMath.randomの二つがある。
        var color = Std.random(0xFFFFFF);
        g.beginFill(color, 1.0);
        g.drawCircle(0, 0, 20);
        addEventListener(Event.ENTER_FRAME, enterFrameHandler);
    }
    private function enterFrameHandler(e) {
        y += yMove;
        yMove += grav;
        if (y > 400) {
            y = 400;
            yMove *= -0.8;
            bound++;
        }
        if (bound > 3) {
            removeEventListener(Event.ENTER_FRAME, enterFrameHandler);
            dispatchEvent(new Event("owata"));
        }
    }
}

haxe -swf9 test4.swf -main FlashTest4 -swf-header 465:465:60:FFFFFF