搜索结果lua - 尝试索引全球“自我”(无值)
我正在运行此代码,希望能让我的敌人每隔5秒产卵一次,但我一直在努力“尝试索引全局”自我“(一个零值)。“这是在我的游戏文件中,表格来自我的敌人文件。任何帮助表示赞赏。搜索结果lua - 尝试索引全球“自我”(无值)
timer = timer + dt
if timer >= 5 then
table.insert(self.enemies, enemy)
timer = timer - 5
end
self
是有效的内部功能,其中self
是明确指定的参数或函数是使用冒号运算符(如在function foo:bar()
)中所定义,因为它会在这种情况下,一个隐藏的参数来提供。
在你的情况看来,这两种情况都没有得到满足,并且self
被视为未定义的全局变量。
查看Object-Oriented Programming chapter in Programming in Lua了解正确使用的详细信息和示例。
谢谢,你有任何解决方案或其他方式让我的敌人不断产卵吗? – skitzlord
我可以看到一些错误。我将解释一种正确的方法来做到这一点,并且可以将其与您设置的方式进行比较。
在你的敌人文件(我将承担其称为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"
这将使enemies.list
和enemies.new
提供您的main.lua内。你table.insert就变成
table.insert(enemies.list, enemies.new())
基本上,你的主要错误是试图访问另一个文件里面的东西,而无需使用require
。希望这可以帮助。
我不这样做Lua所以不要期待太多,但你试过'表:插入(自我:敌人,敌人)'?我从[** here **]得到了这个(https://stackoverflow.com/questions/20258484/attempt-to-index-global-self-a-nil-value) – finnrayment
如果'enemies'是全局变量,那么尝试'table.insert(敌人,敌人)' –