使用BOX2D由於網上看到很多範例
若沒有促一說明,確實有點點感到複雜
這些說明應該適用於各種不同的版本
那初始主要分為二個部份
- 建立世界(b2world),設定其地心引力方向,並設doSleep為true
- 重覆執行一步一步(step),並清除力量(force)
- 加入測試繪圖資料(b2DebugDraw)
其實初始大概這麼做就夠了,大部份範例主要是使用其內建的繪圖,才會需要第三步驟,實際作業只需要前二步
不過若是只做了前二步,在畫面上是不會有任何,東西在動的,我們先來看一下程式
1: package2: {3: import Box2D.Common.Math.b2Vec2;4: import Box2D.Dynamics.b2World;5: import Box2D.Dynamics.b2DebugDraw;6:7: import flash.display.Sprite;8: import flash.events.Event;9:10: public class Initialization extends Sprite11: {12: private var _world:b2World;13: private var scale:uint=30;14:15: public function Initialization()16: {17: super();18: this.addEventListener(Event.ENTER_FRAME, function():void19: {20: _world.Step(1 / 30, 10, 10);21: _world.ClearForces();22: _world.DrawDebugData();23: });24:25: this._world=new b2World(new b2Vec2(0, -30), true);26:27:28: var dbgDraw:b2DebugDraw=new b2DebugDraw();29:30: dbgDraw=new b2DebugDraw();31: dbgDraw.SetSprite(this);32: dbgDraw.SetDrawScale(30.0);33: dbgDraw.SetFillAlpha(0.5);34: dbgDraw.SetLineThickness(1.0);35: dbgDraw.SetFlags(b2DebugDraw.e_shapeBit | b2DebugDraw.e_jointBit);36:37: _world.SetDebugDraw(dbgDraw);38: }39: }40: }41:
以上程式算是對物理引擎設置好了基本環境,目前還未加上在世界裡的物件,所以執行時,不會看到任何東西,
物理引擎做的事是在協助我們在畫面上的物作可以做些實際的物理運動,所以當我們做運作時,是會由一些非可視物件關連到
我們的可視物件去做運動的,當我們還沒關連到畫面上的可視物件時,我們就可以先利用DebugDraw(line 28~37)來測試我們希望物理引擎幫我達到的效果(目前試了二個物理引擎,基本都是這樣設計的)
其中28~37為輔助在還未放上所以設計的圖片或DisplayObject時所用的內建繪圖,在整體完成作單時建議是要拿掉的
下個部份我們再來加上一些可運動物件或加一些固定的運件吧
2011/07/26 updated
接下來的後續篇及以上所使用的Lib是使用 Box2D 2.0 版的
為了有網友提到可能使用不相同的版本,造成某些資料不同,故提供flex所建的 liberary project及swc給有需的人下載
沒有留言:
張貼留言