スポンサーサイト

-------- | --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ActionnScript物理エンジン ape

2007-07-09 | 21:16

ActionnScript物理エンジン ape
http://www.cove.org/ape/index.htm

apeを使ったデモ
http://www.cove.org/ape/demo1.htm

基本的な使い方がわかるように上のデモを簡略化して車だけが動くようにしてみた。 サーフェースも左右の壁と床とバンパー以外は取り除いた。
(flashのウィンドウをクリックしてフォーカスを移した後、'A'キーで左、'D'キーで右にタイヤが回転します)

package {
    import org.cove.ape.*;
   
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.KeyboardEvent;

    [SWF(width="650", height="350", backgroundColor="#334433")]
    public class CarDemo2 extends Sprite {
       
        private static var colA:uint = 0x334433;
        private static var colB:uint = 0x3366aa;
        private static var colC:uint = 0xaabbbb;
        private static var colD:uint = 0x6699aa;
        private static var colE:uint = 0x778877;
   
        private var car:Car;
       
        public function CarDemo2() {
       
            stage.frameRate = 55;
            stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
            stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler);

            // フレーム毎にrun()を呼び出す
            addEventListener(Event.ENTER_FRAME, run);
           
            APEngine.init(1/4);
            APEngine.container = this;
           
            // 重力の設定
            APEngine.addMasslessForce(new Vector(0, 3));
           
            // Surfece2(後述)オブジェクトをグループに追加
            var surfaces:Surfaces2 = new Surfaces2(colA, colB, colC, colD, colE);
            APEngine.addGroup(surfaces);
           
            // 車オブジェクトをグループに追加
            car = new Car(colC, colE);
            APEngine.addGroup(car);
           
            // 車の衝突対象としてsurfacesを追加
            car.addCollidableList(new Array(surfaces));
        }
       
        private function run(evt:Event):void {
            APEngine.step();
            APEngine.paint();
        }
               
        private function keyDownHandler(keyEvt:KeyboardEvent):void {
            var keySpeed:Number = 0.2;

            if (keyEvt.keyCode == 65) {
                car.speed = -keySpeed;
            } else if (keyEvt.keyCode == 68) {
                car.speed = keySpeed;
            }
        }
       
        private function keyUpHandler(keyEvt:KeyboardEvent):void {
            car.speed = 0;
        }
    }
}

package {
    import org.cove.ape.*;
    
    public class Surfaces2 extends Group {
        
        public function Surfaces2(colA:uint, colB:uint, colC:uint, colD:uint, colE:uint) {
            
            // 床
            var floor:RectangleParticle = new RectangleParticle(340,327,550,50,0,true);
            floor.setStyle(0, colD, 1, colD);
            addParticle(floor);
            
            // 床のバンパー
            var floorBump:CircleParticle = new CircleParticle(600,660,400,true);
            floorBump.setStyle(1, colD, 1, colB);
            addParticle(floorBump);
            
            // 左壁
            var leftWallChannelInner:RectangleParticle = new RectangleParticle(54,300,20,150,0,true);
            leftWallChannelInner.setStyle(0, colD, 1, colD);
            addParticle(leftWallChannelInner);
            
            // 右壁
            var rightWall:RectangleParticle = new RectangleParticle(654,230,50,500,0,true);
            rightWall.setStyle(0, colD, 1, colD);
            addParticle(rightWall);
        }
    }
}

下は車を2台にしたもの
スポンサーサイト

Comment

Post a comment

Secret

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。