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これを修正すると、そのループの後に が定義されていることに気付くでしょう。for呼び出すyouLoose()と、まだ定義されていません。local function youLoose()関数をループのに移動する必要があります。ループ自体は関数内ではなく、モジュール レベルであるため、後続のコードの前に実行されるため、ループで使用される関数 (ローカルまたはグローバル) はループの前に定義する必要があります。

「緩い」は「失う」と同じ意味ではないことに注意してください。Grammar-monsterをチェックして違いを確認してください。おそらく、「loose」という言葉があればどこでも「loose」に変更する必要があります。

于 2014-05-18T02:33:18.017 に答える