我正在研究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函数时,所有组件都有不同的名称,因此我想动态命名它们。 如果有任何人有这方面的经验,将不胜感激!谢谢!
答案 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);
这完全有效!不管怎么说,多谢拉。如果有人对该主题或实体组件系统架构有更多信息,我仍然会很高兴。