搜索结果lua - 尝试索引全局'self'(零值)

时间:2017-07-15 03:21:05

标签: lua love2d

我正在运行此代码,希望每隔5秒让我的敌人不断产生,但我只是继续“尝试索引全局'自我'(零值)。”这是在我的游戏文件中,表格来自我的敌人档案。任何帮助表示赞赏。

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

2 个答案:

答案 0 :(得分:1)

self在函数内部有效,其中self是显式指定的参数,或者函数是使用冒号运算符定义的(如function foo:bar()中所示),因为它将作为隐藏提供在这种情况下的参数。

在您的情况下,似乎并不满足这两种情况,self被视为未定义的全局变量。

有关正确使用的详细信息和示例,请参阅Object-Oriented Programming chapter in Programming in Lua

答案 1 :(得分:0)

我可以看到一些错误。我将解释一种正确的方法,你可以将它与你设置它的方式进行比较。

在你的敌人文件中(我将假设它被称为enemy.lua),应该有一个包含几个东西的表:

  1. 一个包含敌人列表的表格(请务必在文件末尾返回!)
  2. 创造新敌人的功能
  3. 看起来像这样:

    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.listenemies.new。你的table.insert然后变成

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

    基本上,您的主要错误是尝试在不使用require的情况下访问其他文件中的内容。希望这会有所帮助。