试图调用零值

时间:2014-05-17 05:27:15

标签: lua gideros

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)的错误,我在哪里做错了?

1 个答案:

答案 0 :(得分:2)

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

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

请注意,“松散”并不代表“失败”。检查Grammar-monster以查看差异。可能在任何地方你都有“松散”这个词,你应该改为“失去”。