【问题标题】:attempt to call a nil value尝试调用一个 nil 值
【发布时间】:2014-05-21 22:48:27
【问题描述】:
for i = 1, groupA:getNumChildren() do
    local sprite = groupA:getChildAt(i) 
    if cute.anim[1]:collidesWith(sprite) then
        youLoose()
    end
end

local function youLoose()
    local font3 = TTFont.new("billo.ttf", 20, " 1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,?")
    local text7 = TextField.new(font2, "gameover")
    text7:setPosition(200, 100)
    stage:addChild(text7)
    GameLost = Bitmap.new(Texture.new("gameover.jpg"))
    Background : removeFromParent()
    groupA : removeFromParent()
    stage: addChild(GameLost)
    alert()
end

它给出了一个错误,上面写着'attempt to call global youLoose (a nil value),我哪里做错了?

【问题讨论】:

  • 这意味着cute.anim[1] 没有collidesWith 方法。
  • 这是什么游戏引擎,gideros?无论如何,您应该为库添加标签。
  • @Schollii:是的,它的 gideros。

标签: lua gideros


【解决方案1】:

注意collideswithcollidesWith不一样;如果您发布的错误是正确的,那么您发布的代码与您使用的代码不同。可能该方法确实被称为collidesWith(它似乎是来自sprite1 的方法),但您使用了collideswith。或者,如果发布的代码是您使用的代码,则错误可能是 attempt to call collideswith(a nil value),因此 cute.anim[1] 不是 sprite1 对象,但也不是 nil,否则错误会有所不同。

修复此问题后,您会注意到 youLoose 是在 for 循环之后定义的,当您调用 youLoose() 时,它尚未定义。您将不得不将local function youLoose() 函数移动到循环之前。因为循环本身不在函数中,而是在模块级别,所以它在任何后续代码之前执行,因此循环中使用的任何函数(本地或全局)都必须在循环之前定义。

请注意,“松”与“输”不一样。检查Grammar-monster 以查看差异。可能在任何有“松”字的地方都应该改为“输”。

【讨论】:

  • collidesWith 错误得到修复,现在我被你卡住了Loose(),我只是无法理解这个错误
  • 而且它不只是为了 youLoose(),我可能会尝试从 tHAT 'IF' 语句中调用任何函数,它会给出与调用全局函数相同的错误(一个 nil 值) 即使我将这些功能设为本地
  • @Simrankaur 更新了,我敢打赌这可以解决您的问题。
猜你喜欢
  • 2017-04-03
  • 2021-07-11
  • 2019-09-15
  • 2018-07-11
  • 2019-06-13
  • 2014-05-06
  • 1970-01-01
  • 2015-05-09
  • 2016-05-09
相关资源
最近更新 更多