好吧,我正在写一个开源库。该库的一部分涉及在二维和三维空间中移动实体,以便具有操纵旋转,位置等的功能。库设计窘境
现在理想情况下,我希望我的图书馆能够与其他图书馆合作,尤其是像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