JAVAC.JP
HOSHI TETSUYA 星鉄矢
2005/07/26
hossy@javac.jp
http://www.javac.jp
Google
WWW を検索 WWW.JAVAC.JP を検索

MTASC | ActionScript 2とFlash OOPのすすめ


メニュー

トップへ

インストール マニュアル

Hello Worldとバッチファイル
画像を扱う様々な方法
実際のアプリケーション:時計
実際のアプリケーション:3Dビューア

trace文がない - デバッガの必要性

手軽にMTASC - サーバサイドコンパイラ
画像を扱う様々な方法

MTASCによる開発においては、絵に対するスタンスが、通常のFlashによる開発と異なってくる。一方でこれは、ソースにバイナリーを含まず、完全にテキストベースでの開発ができる点では優れている。
とりあえず、MovieClip.lineToメソッドを用いて、四角を描いてみよう。

LineTest.as
---
class LineTest {
    function LineTest (path :MovieClip) {
        var x1 :Number = 50;
        var y1 :Number = 50;
        var x2 :Number = 150;
        var y2 :Number = 150;
        path.createEmptyMovieClip("seed", 1);
        var mc :MovieClip = path.seed;
        mc.lineStyle(1,0x000000);
        mc.moveTo(x1, y1);
        mc.lineTo(x2, y1);
        mc.lineTo(x2, y2);
        mc.lineTo(x1, y2);
        mc.lineTo(x1, y1);
    }

    static function main () :Void {
        var base :LineTest = new LineTest(_root);
    }
}

結果は以下のようになる。



参考ファイルダウンロード
linetest.zip



塗りつぶしの際には、beginFillとendFillなどを用いる。

FillTest.as
---
class FillTest {
    function FillTest (path :MovieClip) {
        var x1 :Number = 50;
        var y1 :Number = 50;
        var x2 :Number = 150;
        var y2 :Number = 150;
        path.createEmptyMovieClip("seed", 1);
        var mc :MovieClip = path.seed;
        mc.lineStyle();
        mc.beginFill(0xFF0000);
        mc.moveTo(x1, y1);
        mc.lineTo(x2, y1);
        mc.lineTo(x2, y2);
        mc.lineTo(x1, y2);
        mc.lineTo(x1, y1);
        mc.endFill();
    }

    static function main () :Void {
        var base :FillTest = new FillTest(_root);
    }
}

結果は以下のようになる。



参考ファイルダウンロード
fillest.zip



ここで考えるのは、このようにして絵を描いて行く方法で、Flashと同じクオリティに達することの辛さがある。Flashではドローイングツールとして完備されているベクターデータの描画を、全てスクリプトで書くのは現実的ではないし、MTASCの正しい使い方とは考えづらい。
Graphの描画3D描画などの場合を除いて(つまり読み込んだXMLデータを基に絵を描く場合などを除いて)、MTASCによる開発において重宝するのはMovieClip.loadMovieメソッドだろう。

JpegLoad.as
---
class JpegLoad {
    private var count :Number;

    function JpegLoad (path) {
        path.createEmptyMovieClip("seed", 1);
        var pMc :MovieClip = path.seed;
        pMc.createEmptyMovieClip("seed", 1);
        var mc :MovieClip = pMc.seed;
        mc.loadMovie("img/test.jpg");
        count = 0;
        var ref = this;
        pMc.onEnterFrame = function () {
            var obj :Object = new Object();
            obj.target = this;
            ref.onEnterFrameHandler(obj);
        };
    }

    public function onEnterFrameHandler (event) :Void {
        var target = event.target;
        count++;
        target._alpha = 50 + 50 * Math.cos(Math.PI * count / 200);
    }

    static function main () :Void {
        var base :JpegLoad = new JpegLoad(_root);
    }
}

結果は以下のようになる。



参考ファイルダウンロード
jpegload.zip



上記サンプルで、JPEGをロードしたついでに、時間経過とともにアルファ変化が起こるようにした。ここで感じることは、スクリプトのみで行うアニメーションの辛さである。絵としてだけでなく、アニメーションもロードすることで、Flashにて吐き出したSWFの恩恵に預かることができる。これは特に、数式演算の不可能なレベルのアニメーションの際に重宝する。以下は、単純に回転する丸をロードする例と、複雑なシェイプトゥーインを行うものをロードした例である。
NowLoadingのアニメーションなど、アニメーションファイルとしてSWFを読み込むことでスクリプト実装の工数を削減できる場面はいくつもありそうだ。

SwfLoad.as
---
class SwfLoad {
    function SwfLoad (path :MovieClip) {
        path.createEmptyMovieClip("seed" ,1);
        var pMc :MovieClip = path.seed;
        pMc.createEmptyMovieClip("seed" ,1);
        var mc :MovieClip = pMc.seed;
        mc.loadMovie("img/test.swf");
    }

    static function main () :Void {
        var base :SwfLoad = new SwfLoad(_root);
    }
}





参考ファイルダウンロード
swfload.zip




All Contents Copyright (C) 2005 HOSHI Tetsuya
Home