lua中如何通过字符串实例化一个类

我有一个函数可以生成敌人,它会从一个列表中随机选择一个实体名称。这些名称是字符串,例如'spider','mole','bee'等。然后我想使用该字符串创建该实体的一个实例。每个实体都有自己的脚本和行为。

local entity = ENTITIES[math.random(1, #ENTITIES)]

     new_entity = entity({
            x = 0,
            y = 0
     })

其中 entity 可以是 "mole",而不是

if entity == 'mole' then Mole({
            x = 0,
            y = 0
        })
elseif entity == 'spider' then Spider({

我确信这个问题已经有了答案,但是我不知道怎么查找它。 谢谢!

点赞
用户1971216
用户1971216

最简单也可能是最好的方法就是简单地使用构造函数的表格:

local ENTITY_CONSTRUCTORS = {
  spider = Spider,
  mole = Mole,
  bat = Bat,
  ...
}

然后:

local entity = ENTITIES[math.random(#ENTITIES)]
local object = ENTITY_CONSTRUCTORS[entity]{ x=0, y=0 }

甚至可以通过在ENTITIES表格中直接存储构造函数来进一步简化:

ENTITIES = { Spider, Mole, Bat }
local object = ENTITIES[math.random(#ENTITIES)]{ x=0, y=0 }
2020-08-30 16:30:30