搜索结果 lua - 尝试对全局变量 'self' 进行索引(一个 nil 值)

我正在运行这段代码,希望每隔5秒就会刷出我的敌人,但我一直得到"尝试对全局变量 'self' 进行索引(一个 nil 值)。"我的代码在游戏文件中,而表格来自敌人文件。任何帮助都将不胜感激。

timer = timer + dt
if timer >= 5 then
table.insert(self.enemies, enemy)
timer = timer - 5
end
点赞
用户1442917
用户1442917

在函数中,self 是一个显式指定的参数或使用冒号操作符定义函数(如 function foo:bar())时是有效的,因为在这种情况下它将作为隐藏参数提供。

在您的情况下,似乎没有满足这两种情况,因此 self 会被视为未定义的全局变量。

有关正确使用的详细信息和示例,请参见《编程指南》(Programming in Lua)中的面向对象编程章节。

2017-07-15 04:53:57
用户8201190
用户8201190

我能看出有一些问题。我将解释一种正确的做法,你可以将其与你的设置进行比较。

在你的敌人文件中(我假设它叫做enemy.lua),应该有一个包含几个内容的表格:

  1. 一个包含敌人列表的表(在文件末尾确保返回它!)
  2. 创建新敌人的函数

它可能看起来像这样:

local enemies = { }    -- 导出表格

enemies.list = { }     -- 实体列表

function enemies.new()
    local new_entity = { }

    new_entity.x = 0        -- 设置实体坐标
    new_entity.y = 0

    -- 设置实体的任何其他信息,比如精灵、生命值等。

    return new_entity
end

return enemies         -- 通过 require 将此表格提供给其他文件使用

然后,在main.lua中引入它:

local enemies = require "enemies"

这将使enemies.listenemies.new在main.lua中可用。然后你的table.insert就变成了:

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

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

2017-07-17 02:03:48