多个敌人和子弹

时间:2014-01-03 09:59:37

标签: lua corona

我正在制造射击子弹的敌人。

我有enemy.lua个文件。

在其中,我有一个子弹列表:

local bullets = {}

当我在main.lua中创建其中两个时,问题就来了,其中只有一个会射击。我认为他们两个都在共享同一个名单。

例如,Enemy 1和Enemy 2分别射击子弹,但没有显示Enemy 2的子弹。但是他们的两个列表都返回1.之后我删除了Enemy 1的子弹,他们的两个列表都返回0.

如何让它像类一样工作(就像在其他编程语言中一样)。据我所知,它不应该以这种方式工作。

谢谢!

编辑1: 我有一个敌人。 与答案不同,我这样编码

local enemy = {} -- at the start
local bullet= {} -- it is another list

-- in between I have functions
-- for examples
function enemy.new()
function enemy:shoot()
function enemy:update()

return enemy -- at the end

1 个答案:

答案 0 :(得分:1)

我认为您尝试将敌人用作类并尝试更改特定于对象的“子弹”。当您尝试这样做时,lua会更改模块中的变量,而不是对象中的变量。这就是为什么敌人只会编制一个列表。为避免这种情况,我建议您使用以下内容:

-- enemy.lua file :

function createEnemy()
   local newEnemy = {}

   -- Add some fields
   newEnemy.image = display.newImage(....)
   newEnemy.bullets = 3

   -- Add some methods if necessary
   newEnemy:shoot = function()
      newEnemy.bullets = newEnemy.bullets - 1
   end

   return newEnemy
end

方法和字段仅是示例。您应该根据需要更改它们。通过这种方式,您将使用自己的字段和方法创建敌人对象。就像在任何其他oop设计中一样。

继续编码^^

---加法:

您应该以面向对象的方式使用这些结构。你应该有一些数组来达到你的对象。以及掌握它们的方法。例如,您可以使用以下内容:

-- game.lua file :

require("enemy")

-- Array to hold enemies.
local enemies = {}
for i=1, 10 do
    enemies[#enemies+1] = enemy.createEnemy()
end

如果您仍有问题,我建议您研究面向对象的逻辑。