我正在运行此代码,希望每隔5秒让我的敌人不断产生,但我只是继续“尝试索引全局'自我'(零值)。”这是在我的游戏文件中,表格来自我的敌人档案。任何帮助表示赞赏。
timer = timer + dt
if timer >= 5 then
table.insert(self.enemies, enemy)
timer = timer - 5
end
答案 0 :(得分:1)
self
在函数内部有效,其中self
是显式指定的参数,或者函数是使用冒号运算符定义的(如function foo:bar()
中所示),因为它将作为隐藏提供在这种情况下的参数。
在您的情况下,似乎并不满足这两种情况,self
被视为未定义的全局变量。
有关正确使用的详细信息和示例,请参阅Object-Oriented Programming chapter in Programming in Lua。
答案 1 :(得分:0)
我可以看到一些错误。我将解释一种正确的方法,你可以将它与你设置它的方式进行比较。
在你的敌人文件中(我将假设它被称为enemy.lua),应该有一个包含几个东西的表:
看起来像这样:
local enemies = { } -- table to export
enemies.list = { } -- list of entities
function enemies.new()
local new_entity = { }
new_entity.x = 0 -- set entity coordinates
new_entity.y = 0
-- set any another entity information, like sprites, health, etc.
return new_entity
end
return enemies -- make this table available to other files through require
然后,使用以下行将其导入main.lua:
local enemies = require "enemies"
这将使你的main.lua中有enemies.list
和enemies.new
。你的table.insert然后变成
table.insert(enemies.list, enemies.new())
基本上,您的主要错误是尝试在不使用require
的情况下访问其他文件中的内容。希望这会有所帮助。