スポンサーサイト

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

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

[ActionScript 3.0]物理エンジンFisixを使ってみる

2007-08-04 | 16:04


http://www.fisixengine.com/よりダウンロード
zipファイルを展開するとExampleフォルダにサンプルプログラムのソースがいくつか入っている
Example1とExample2を少しいじって、日本語のコメントをつけてみた

package
{
    import com.fileitup.fisixengine.collisions.ReactionModes;
    import com.fileitup.fisixengine.core.FisixObject;
    import com.fileitup.fisixengine.core.FisixEngine;
    import com.fileitup.fisixengine.core.Vector;
    import com.fileitup.fisixengine.particles.CircleParticle;
    import com.fileitup.fisixengine.particles.WheelParticle;
    import com.fileitup.fisixengine.primitives.Surface;
   
    import flash.display.MovieClip;
    import flash.text.TextField;
   
    /**This example shows how to create a basic simulation and run it.
     *
     * There are two ways of running a simulation in Fisix
     *         1. through a timer, implemented in the FisixEngine class
     *         2. through the ENTER_FRAME event
     *
     * In this example, the built in timer will be used.
     * For some reason, flash's timers cause some choppiness, so in future examples the event method will be used...
     */
    [SWF(width='600',height='300',backgroundColor='0xffffff',framerate='30')]
    public class Example1 extends MovieClip{       
        public function Example1(){
            // 最初にFisixEngineオブジェクトを作る
            var myEngine:FisixEngine = new FisixEngine()
            // 衝突時のモードを設定
            myEngine.setReactionMode(ReactionModes.PHYSICAL)
           
            // 重力を設定(x方向 0, y方向 30) :
            myEngine.setGravity(0,30)
           
            // サーフェスを作ってエンジンに追加
            // 開始点 (0,200) 終了点 (300,210) 直径 10
            var surface1:Surface = myEngine.newSurface(new Vector(0,200),new Vector(300,210),10)
            // サーフェスのプロパティ設定 (反発 / 摩擦)
            surface1.bounce = 1.8
            surface1.friction = 0.5       

            // もうひとつサーフェスを作ってエンジンに追加
            // 開始点 (300,210) 終了点 (600,200) 直径 10
            var surface2:Surface = myEngine.newSurface(new Vector(300,210),new Vector(600,200),10)
            // サーフェスのプロパティ設定 (反発 / 摩擦)
            surface2.bounce = 1.8
            surface2.friction = 0.0       
           
            // 四方の壁を設定
            var walls:FisixObject = myEngine.newFisixObject()
            walls.makeStatic() //tells the engine the objects in this group won't be moving--extra optimization
            walls.newSurface(new Vector(0,0),new Vector(800,0))
            walls.newSurface(new Vector(800,0),new Vector(800,600))
            walls.newSurface(new Vector(800,600),new Vector(0,600))
            walls.newSurface(new Vector(0,600),new Vector(0,0))

            // 円パーティクルを作って、エンジンに追加 : 位置 (80,50)  半径 50
            var particle1:WheelParticle = myEngine.newWheelParticle(80,50,50)
            // プロパティ設定 (反発 / 摩擦)
            particle1.bounce = 1.5
            particle1.friction = 0.0
           
            //turn on primitive rendering
            myEngine.setRender(true)
            //tell the engine where to render to
            myEngine.setRenderGraphics(graphics)
           
            // エンジンの開始
            // 注:先頭のコメントにある通り、Fisixエンジンのシミュレーションの動作方法としては
            // 1. timerを使って動作させる (startEngine())
            // 2. ENTER_FRAMEイベントでmainLoop()メソッドを呼び出す
            // という2種類のやり方がある
            myEngine.startEngine(30)
        }
    }
}
スポンサーサイト

Comment

Post a comment

Secret

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