好吧,我正在寫一個開源庫。該庫的一部分涉及在二維和三維空間中移動實體,以便具有操縱旋轉,位置等的功能。庫設計窘境
現在理想情況下,我希望我的圖書館能夠與其他圖書館合作,尤其是像Papervision3D和其他Flash 3D引擎,但不會忘記Sprite或Movieclip等基本圖像對象。
所以這是我的窘境。將操縱實體的函數也需要修改底層模型數據的值(因此無論是Sprite,Papervision對象等)。使我的庫靈活以便它可以支持多種數據模型的最佳方法是什麼?性能也是重要方面。
目前我想到的是這樣的:
//this is the public function that I expose in my library
public function rotate(val:Number,func:Function,objData:*):void
{
func(val,objData);
}
//example of a function that could be passed in
//this one will rotate a MovieClip
private function modelFunction1(rot:Number,objData:*):void
{
var myMov:MovieClip = objData as MovieClip;
myMov.rotation = rot;
}
//second example of a function that could be pass in
//this one will rotate a point
private function modelFunction2(rot:Number,objData:*):void
{
//yes I know this piece of code makes no sense :P
var p:Point = objData as Point;
p.x = Math.cos(rot);
p.y = Math.sin(rot);
}
這樣的話它可以用來像:
rotate(4,modelFunction2,myPoint)
//or
rotate(4,modelFunction1,mySprite);
我要補充一點,在現實中我作爲客戶端代碼,深得無法直接調用旋轉功能。相反,我想要傳入的旋轉函數需要作爲類成員存儲在某處,然後由rotate函數調用。它只是更少的代碼讓我像上面那樣寫出來。
這對我來說看起來很靈活,雖然鑄造和傳遞函數的性能影響涉及到我(但可能沒問題)。任何人都可以提出一個替代方案,或者我有最合理的解決方案。謝謝:)
這正是我所追求的。謝謝 :) – Allan 2010-01-19 23:22:50