2008年2月11日 星期一

Box2D API Design

唉...還是點進去看吧...

##CONTINUE##

工廠與定義


記憶體管理在Box2D API設計中扮演一個重要的腳色,所以當你要建立b2Body或是b2Joint型別的物件時,你需要呼叫在b2World上的工廠函式(p.s.這就是design pattern中的factory method pattern)

有建立用的函式

b2World.CreateBody(def:b2BodyDef):b2Body;
b2World.CreateJoint(def:b2JointDef):b2Joint;


也有相對毀滅用的函式

b2World.DestroyBody(body:b2Body):void;
b2World.DestroyJoint(joint:b2Joint):void;


當你要建立一個body物件或是joint物件,你需要提供一個定義。這些定義包含用來建立物件所需的所有資訊。藉由這些定義我們可以防止建立物件時的錯誤,讓函式的參數數目更少,提供更直覺的預設值,以及減少直接的存取動作。


使用者資料(user data)

b2Shape,b2Body以及b2Joint類別允許你加入各種型別的使用者資料。當你在檢視Box2D的資料結構時,也想要判斷它與遊戲資料結構的關聯性,這就會很方便。

例如,一個很典型的範例是將演員(actor)指定給演員(actor)所屬的body物件。如此一來,如果你有演員(actor)的參考就可以得到body物件。如果你有body物件的參考也能夠得到演員(actor)。

var actor:Actor = new Actor();
var bodyDef:b2BodyDef = new b2BodyDef();
bodyDef.userData = actor;
actor.body = b2World.CreateBody(bodyDef);


基本上Box2D的物理模擬與物件狀態是存在於虛擬世界中的,並不會顯示在畫面上,所以需要一個圖像,也就是演員,並將它對應到body物件的位置與角度,如此才能夠將模擬的結果顯示出來。

這裡是一些你會使用使用者資料的情形:
使用碰撞的結果對演員套用傷害
當演員進入某個box的範圍時執行預設的腳本事件
當Box2D告訴你某個joint物件將要被摧毀時,你可以存取整個遊戲的結構。

要注意,使用者資料是自由指定的,所以你可以把任何型別的物件指定給它。但是你要保持一個不變性。例如說,如果你要儲存一個演員到body上,你就要讓所有的body都有一個相對應的演員。不要在一個body上儲存演員,而在另一個body上儲存笨蛋。這樣在執行型別轉換時會造成錯誤的發生。

沒有留言:

 
Blogger Template Layout Design by [ METAMUSE ] : Code Name Gadget 1.1