2017-07-15 193 views
0

我正在运行此代码,希望能让我的敌人每隔5秒产卵一次,但我一直在努力“尝试索引全局”自我“(一个零值)。“这是在我的游戏文件中,表格来自我的敌人文件。任何帮助表示赞赏。搜索结果lua - 尝试索引全球“自我”(无值)

timer = timer + dt 
if timer >= 5 then 
table.insert(self.enemies, enemy) 
timer = timer - 5 
end 
+1

我不这样做Lua所以不要期待太多,但你试过'表:插入(自我:敌人,敌人)'?我从[** here **]得到了这个(https://stackoverflow.com/questions/20258484/attempt-to-index-global-self-a-nil-value) – finnrayment

+1

如果'enemies'是全局变量,那么尝试'table.insert(敌人,敌人)' –

回答

1

self是有效的内部功能,其中self是明确指定的参数或函数是使用冒号运算符(如在function foo:bar())中所定义,因为它会在这种情况下,一个隐藏的参数来提供。

在你的情况看来,这两种情况都没有得到满足,并且self被视为未定义的全局变量。

查看Object-Oriented Programming chapter in Programming in Lua了解正确使用的详细信息和示例。

+0

谢谢,你有任何解决方案或其他方式让我的敌人不断产卵吗? – skitzlord

0

我可以看到一些错误。我将解释一种正确的方法来做到这一点,并且可以将其与您设置的方式进行比较。

在你的敌人文件(我将承担其称为enemy.lua),应该包含几件事情表:

  1. 的表将包含你的敌人名单( !一定要在文件的最后返回吧)
  2. 创建一个新的敌人的函数

它可能是这个样子:

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.listenemies.new提供您的main.lua内。你table.insert就变成

table.insert(enemies.list, enemies.new()) 

基本上,你的主要错误是试图访问另一个文件里面的东西,而无需使用require。希望这可以帮助。