『 QuickBox2D オブジェクトの平行移動と回転 』

2009 年 7 月 6 日

quick_box2d_sample_translation
オブジェクトの平行移動と回転のサンプル
ボールをドラッグで投げると、ステージ端から端へとループ。
また、ステージクをクリックすればクリックした座標に対応した回転角度で赤いバーが回転。

QuickBox2Dの小ネタ。
運動の状態を保持したままオブジェクトを平行移動や回転させるには、
QuickObjectインスタンスのx、y、angleプロパティを変更すれば良いみたい。
あるオブジェクトのQuickObjectインスタンスはaddしたときに戻り値として受け取れる。
Box2DFlashAS3のSetXFormを使うよりも簡単で便利。

以下サンプルのソースコード(実行には別途Tweenerが必要です)

import com.actionsnippet.qbox.*;
import caurina.transitions.Tweener;

//初期化
var sim:QuickBox2D = new QuickBox2D(this);
sim.setDefault( { fillColor:0x0, lineAlpha:0 } );

//地面を作る
sim.addBox( { x:10, y:13, width:30, height:0.1, density:0 } );

//円を3つ作って配列 _circles に入れておく
var circles:Array = new Array();
circles.push( sim.addCircle( { x:4 , y:8, radius:0.3, isBullet:true } ) );
circles.push( sim.addCircle( { x:6 , y:8, radius:0.6, isBullet:true } ) );
circles.push( sim.addCircle( { x:8 , y:8, radius:1.0, isBullet:true } ) );

//バーを作って変数 _bar に入れておく
var bar:QuickObject = sim.addBox( { x:9, y:5, width:4, height:0.2, angle:0.3, density:0, fillColor:0xcc0000 } );

//シミュレーション開始
sim.start();
sim.mouseDrag();

//各種イベントリスナの登録
addEventListener(Event.ENTER_FRAME, enterFrameHandler);
stage.addEventListener(MouseEvent.CLICK, stageClickHandler);

//円をループさせる処理
function enterFrameHandler(e:Event):void
{
    var sw:Number = stage.stageWidth / 30;

    //全ての円を走査する
    for each(var b:QuickObject in circles)
    {
        var r:Number = b.params.radius;

        //左端から出たら右端に移動させる
        if (b.x < -r    ) b.x = sw + r;
        else
        //右端から出たら左端に移動させる
        if (b.x > sw + r) b.x = -r;
    }
}

//ステージがクリックされたときにバーを回転させる処理
function stageClickHandler(e:MouseEvent):void
{
    //バーの角度を変更
    Tweener.addTween(bar, {
        angle:bar.angle + ((mouseX / stage.stageWidth) - 0.5) * 10,
        time:1,
        transition:"easeOutQuart"
    } );
}

 

他のQuickBox2Dネタ一覧もどうぞ » tag : QuickBox2D

« 
» 

Leave a Reply