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

4

1 回答 1

2

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

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

请注意,“loose”与“loose”的含义不同。检查语法怪物以查看差异。可能到处都有“松散”这个词,您应该改为“失去”。

于 2014-05-18T02:33:18.017 回答