我正在制造射击子弹的敌人。
我有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
答案 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
如果您仍有问题,我建议您研究面向对象的逻辑。