AS3动态命名对象属性

时间:2018-04-04 15:33:47

标签: actionscript-3 object components entity

我正在研究AS3中的一种实体组件系统。在我的EntityManager类中,我有一个名为createEntity的函数。它接受一个字符串数组,然后成为权利的组件。

public function createEntity(newComponents:Array):void
    {
        var newEntity:Entity = new Entity();
        var obj:Object = new Object();
        obj.id = newEntity.id;

        // This is what I would like to do.
        var newComponentName:String;
        for (var i:int = 0; i < newComponents.length; i++)
        {
            newComponentName = newComponents[i];
            obj.newComponentName = createComponent(newComponents[i]);
        }

        trace(obj.Health); // result = undefined

        /* This was my previous setup. This way makes it really hard for my systems to access the components.
        var components:Array = [];
        for (var i:int = 0; i < newComponents.length; i++)
        {
            components.push(createComponent(newComponents[i]));
        }
        obj.components = components;
        */
    }

此外,系统通过ID访问实体。在entityManager中有一个getEntityByID函数。我希望能够(从HealthSystem类)调用实体的健康组件,如下所示:(简化一点)

getEntityByID(testID).Health

使用createEntity函数时,所有组件都有不同的名称,因此我想动态命名它们。 如果有任何人有这方面的经验,将不胜感激!谢谢!

1 个答案:

答案 0 :(得分:0)

OMG。我爱我如何永远地输入我的问题,然后答案在发布后几秒钟就打到了我。

var newComponentName:String;
        for (var i:int = 0; i < newComponents.length; i++)
        {
            newComponentName = newComponents[i];
            obj[newComponentName] = createComponent(newComponents[i]);
        }

        trace(obj.Health);

这完全有效!不管怎么说,多谢拉。如果有人对该主题或实体组件系统架构有更多信息,我仍然会很高兴。