ホーム >> 左脳ActionScript3 >> アクションスクリプト3 >> boidデモを作る >> boidデモ作成 その2:点を動かす。
boidデモ作成 その2:点を動かす。
フラッシュで、「boids」デモを作ってみよう。第2回。

ただランダムな点が表示されるだけの前回からの続き。コードも変更点しか示さないので、前回分を良くチェック。

ただひたすらランダムが点が動きもせずに表示されるだけでは、デモにすらならない。せめて、動きを加えて見れるようにしよう。



点を動かす

boidクラスに点の移動ルーチンを追加してみる。
boid.as のクラス記述に、以下のルーチンを追加。move 自体は、一定時間で呼ばれる draw 内(ルーチンの最初とか最後とかループ外で)から呼べば良いだろう。

public function move():void 
{
    for (var i:int = 0; i < number_of_points; i++)
    {
        var t:one   =   objs[i];
        //  vの方向に進み端跳ね返る
        var nx:Number   =   t.p.x + t.v.x;
        var ny:Number   =   t.p.y + t.v.y;
        if ( nx < 0 )   {   nx = 0; t.v.x   =   -t.v.x; }
        if ( nx > wd )  {   nx = wd;    t.v.x   =   -t.v.x; }
        if ( ny < 0 )   {   ny = 0; t.v.y   =   -t.v.y; }
        if ( ny > he )  {   ny = he;    t.v.y   =   -t.v.y; }
        t.p.x   =   nx;
        t.p.y   =   ny;
    }
}
今回のサンプルでは、draw ルーチン内の最初の行に、「move();」を加えている。

Get Adobe Flash player
動きはするが、ただただ画面内で点がランダム方向に動き続けるだけ。すぐ飽きてしまう。
移動方向も適当に乱数をあてがっただけの為、右下の方向へ進む傾向しか無い。

チカチカしている点があるが、これは移動速度が遅すぎる為である。(厳密には、移動速度が遅すぎる為、点の描画に使用している lineTo メソッドが線として認識しなくなり、描画が省かれてしまう為に起こる)

こんな状態では、ページに貼り付けてもお客さんにすぐに飽きられてしまうは必至である。手を抜けば抜いたなりの動きにしかならない。


せめて、方向くらい一様なランダムにしよう。oneクラスのコンストラクタ内の記述を変更。

public function one(w:Number, h:Number) 
{
    //  ランダムな位置
    p   =   new Point(Math.random() * w, Math.random() * h);
    //  ランダムな向き
    var r:Number    =   Math.random() * Math.PI * 2.0;
    v   =   new Point(Math.cos(r), Math.sin(r));
}

Get Adobe Flash player

全ての点が、同じ速さでランダムな方向に動くようになった。

小学校の理科の時間にミジンコの観察をしたときのような光景である。さすがにミジンコは壁に当るまで直進はしないが。


>> その3へ。

トラックバック(0)

トラックバックURL: http://n-yagi.0r2.net/sanoupulurun/mt-tb.cgi/196

コメントする

ホーム >> 左脳ActionScript3 >> アクションスクリプト3 >> boidデモを作る >> boidデモ作成 その2:点を動かす。