首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AS3更智能的类型定义

AS3更智能的类型定义
EN

Stack Overflow用户
提问于 2012-05-24 05:52:49
回答 3查看 148关注 0票数 0

我正在用AS3开发一个基于组件的引擎,我在游戏对象中有一个函数,它根据组件的类型返回一个组件:

代码语言:javascript
复制
gameObject.Has(Body); //This will return a reference to the gameobjects body component

我遇到的问题是访问组件。要做到这一点,我必须这样做:

代码语言:javascript
复制
Body(gameObject.Has(Body)).SetVelocity(5);

有没有人有更好的方法呢?

编辑:

代码语言:javascript
复制
public function Has(type:Class):BaseComponent
{
    for each(var component:BaseComponent in m_components)
        if (component is type)
            return component;

    return null;
}
EN

回答 3

Stack Overflow用户

发布于 2012-05-24 06:18:46

你现在有什么关于Has()的返回类型?

如果您更喜欢绕过类型检查。您可以让Has()方法返回类型为Object。

代码语言:javascript
复制
public function Has():Object{
  ...
  return anObject;
}

#then you can call any prop/method without throwing type errors.
gameObject.Has(Body).SetVelocity(5)

然而,在不强制转换var的情况下,没有一种很好的方法来维护类型检查,您已经在示例代码中这样做了。

票数 0
EN

Stack Overflow用户

发布于 2012-05-24 08:40:22

看起来你的问题是你试图在你的实现中过于通用。这引入了两个可能的失败点:在“入”端,您可能会为Body加载一个不是Body的BaseObject;在"out“端,您的gameObject可能会返回一个不是Body的对象(当前实现显然是类型安全的这一事实并不是已知的)。

您知道,当您调用本质上是真正泛型的getter时,您需要它返回特定类型的对象(因为您将在它上面调用方法),所以为什么不只需要显式的getter和setter来简化您的工作呢?

或者你可以让变得完全可笑,并将你的BaseObject泛化为:

代码语言:javascript
复制
gameObject.has(Body).callMethod('setVelocity').to(5);
票数 0
EN

Stack Overflow用户

发布于 2012-05-24 13:51:47

我们在我们的项目中也在做同样的事情。但我们有另一种方法。我们的ObjectUtility中有一个实用程序类。该方法返回特定根对象下的所有对象。

代码语言:javascript
复制
        public function collectObjectsByType(object:Object, type:Class, results:Array):void
    {

    }

我可以只展示方法结构。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10728421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档