Actionscript 3 AS3智能型定义
我正在AS3中开发一个基于组件的引擎,我在game object中有一个函数,它根据组件的类型返回一个组件:Actionscript 3 AS3智能型定义,actionscript-3,game-engine,Actionscript 3,Game Engine,我正在AS3中开发一个基于组件的引擎,我在game object中有一个函数,它根据组件的类型返回一个组件: gameObject.Has(Body); //This will return a reference to the gameobjects body component 我遇到的问题是访问组件。要做到这一点,我必须这样做: Body(gameObject.Has(Body)).SetVelocity(5); 有人有更好的方法吗 编辑: 您当前对Has()的返回类型有什么要求 如果
gameObject.Has(Body); //This will return a reference to the gameobjects body component
我遇到的问题是访问组件。要做到这一点,我必须这样做:
Body(gameObject.Has(Body)).SetVelocity(5);
有人有更好的方法吗
编辑:
您当前对Has()的返回类型有什么要求 如果你喜欢避开类型检查。可以让Has()方法返回类型对象
public function Has():Object{
...
return anObject;
}
#then you can call any prop/method without throwing type errors.
gameObject.Has(Body).SetVelocity(5)
然而,没有一种很好的方法可以在不强制转换var的情况下维护类型检查,您已经在示例代码中这样做了。您的问题似乎在于您试图在实现中过于通用。这引入了两个可能的失败点:在“in”端,您可能会为您的身体加载一个非身体的BaseObject;在“out”端,您的游戏对象可能会返回一个非身体的对象(当前实现显然是类型安全的这一事实并不是给定的) 你知道,任何时候你调用一个真正通用的getter,你需要它返回一个特定类型的对象(因为你要调用它的方法),那么为什么不通过使用显式的getter和setter来简化你的工作呢 或者你可以得到完全荒谬的基本对象,并将其一般化,如:
gameObject.has(Body).callMethod('setVelocity').to(5);
在我们的项目中,我们也在做同样的事情。但我们还有另一种方法。我们的ObjectUtility中有一个实用程序类。该方法返回特定根对象下的所有对象
public function collectObjectsByType(object:Object, type:Class, results:Array):void
{
}
我可以只显示方法结构。是的,我考虑过这样做。我真的希望AS3有模板和预处理器指令。我也在考虑编写一个按类型索引的函数数组,但这似乎有些过分。在AS3中,我很少设置这样一个通用的m_组件数组。我想这是一种情况,你有许多不确定的对象,你正在跟踪或你试图写更少的代码。如果您想简化Body的处理,可以使用getter:
公共函数get Body():Body
来包装和强制转换该项。
public function collectObjectsByType(object:Object, type:Class, results:Array):void
{
}