フラッシュをつくる 5

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

import flash.display.BitmapData;
import flash.display.Sprite;
import flash.events.Event;
import flash.geom.Matrix;
import flash.text.TextField;
import flash.text.TextFormat;
import flash.filters.DisplacementMapFilter;
import flash.Lib;

class FlashTest3 extends Sprite {
    var w   : TextField;
    var g   : Sprite;
    var gBD : BitmapData;
    var mc  : Sprite;
    public function new() {
        super();
        addEventListener(Event.ADDED_TO_STAGE, init);
    }
    private function init(e) {
        stage.align = flash.display.StageAlign.TOP_LEFT;
        stage.scaleMode = flash.display.StageScaleMode.NO_SCALE;

        g = new Sprite();
        gBD = new BitmapData(stage.stageWidth, stage.stageHeight, false, 0x000000);

        w = new TextField();
        w.defaultTextFormat = new TextFormat("Arial", 30);
        w.textColor = 0xffffff;
        w.autoSize = flash.text.TextFieldAutoSize.LEFT;

        mc = new Sprite();
        mc.alpha = 0.9;

        addChild(g);
        addChild(mc);
        addEventListener(Event.ENTER_FRAME, u);
    }
    private function u(e) {
        var t = Lib.getTimer();
        var ts = Math.sin(t * .0003);
        var tc = Math.cos(t * .0003);

        w.text = Std.string(t);
        var wBD = new BitmapData(Std.int(w.width),Std.int(w.height), false, 0x000000);
        wBD.draw(w);

        g.graphics.clear();
        g.graphics.beginGradientFill(flash.display.GradientType.RADIAL,
            [0xFFFFFF, 0x000000], [1, 1], [0x00, 0xFF],
            new Matrix(ts * 0.5 + 0.5, 0, 0, ts * 0.5 + 0.5,
                stage.stageWidth * .5, stage.stageHeight * .5),
            flash.display.SpreadMethod.REFLECT,
            flash.display.InterpolationMethod.LINEAR_RGB );
        g.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
        gBD.draw(g);

        mc.graphics.clear();
        mc.graphics.beginBitmapFill(wBD,
            new Matrix(tc * ts + 1, ts, -ts, tc * ts + 1, 0, 0), true, false);
        mc.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
        mc.filters = [new DisplacementMapFilter(gBD, null, 1, 1, tc * 500., tc * 500.,
            flash.filters.DisplacementMapFilterMode.WRAP, 0, 0.)];
    }
    public static function main() {
        flash.Lib.current.addChild(new FlashTest3());
    }
}

haxe -swf9 test3.swf -main FlashTest3.hx -swf-header 465:465:30:FFFFFF
丸パクリだけど、部分的に手直しがいる。
モードを文字列でなくenum型で表す。importせずに完全な型パス名を書いたので長くなっている。
FloatはそのままではIntに代入できないのでStd.intでInt型に変換している。
時刻取得はLib.getTimerを使う。Std.stringで任意の型を文字列型に変換できる。