多个敌人和子弹。

我正在制作一个射击子弹的敌人。

我有一个 enemy.lua 文件。

里面有一个子弹列表:

local bullets = {}

问题出现在当我在main.lua中创建两个敌人时,只有一个会射击。我认为它们都共享同一个列表。

例如,敌人1和敌人2每个射击一个子弹,但敌人2的子弹没有显示。但是他们的列表都返回1。然后我移除了敌人1的子弹,他们的列表都返回0。

我该如何使它像一个类一样工作(像其他编程语言中的类一样)?据我所知,它不应该这样工作。

谢谢!

编辑1: 我有一个enemy.lua。 与答案不同的是,我编写了如下代码

local enemy = {} -- 开始
local bullet = {} -- 这是另一个列表

-- 其间我有函数 
-- 例如
function enemy.new()
function enemy:shoot()
function enemy:update()

return enemy --到此结束
点赞
用户2186639
用户2186639

我认为你尝试使用"敌人"作为一个类,尝试更改特定于对象的"子弹"。当你尝试这样做时,Lua会更改模块中的变量,而不是对象中的变量。这就是为什么敌人只操作一个列表。为了避免这种情况,我建议你使用类似于以下的方法:

-- enemy.lua 文件:

function createEnemy()
   local newEnemy = {}

   -- 添加一些属性
   newEnemy.image = display.newImage(....)
   newEnemy.bullets = 3

   -- 添加一些方法(如果必要)
   newEnemy:shoot = function()
      newEnemy.bullets = newEnemy.bullets - 1
   end

   return newEnemy
end

这里的方法和属性只是示例,你应该根据实际需要进行更改。通过这种方式,你将创建一个具有自己属性和方法的敌人对象。就像任何其他oop设计一样。

继续编码^^

--- 补充:

你应该以面向对象的方式使用这些结构。你应该有一些数组来访问你的对象。并且有方法来操作它们。例如你可以使用类似于以下的方法:

-- game.lua 文件:

require("enemy")

-- 用于保存敌人的数组
local enemies = {}
for i=1, 10 do
    enemies[#enemies+1] = enemy.createEnemy()
end

如果你仍然有一些问题,我建议你学习面向对象的逻辑。

2014-01-03 11:41:01