1

こんにちは、何らかの理由でコロナが私にこのエラーを与えています: グローバル 'backC' (nil 値) のインデックスを作成しようとしています

local randomBackC = function()
    backC = display.newImage("Cloud"..tostring(math.random(1, 4))..".png")
    backC.x = math.random (30, 450); backC.y = -20
    physics.addBody( backC, { density=2.9, friction=0.5, bounce=0.7, radius=24 } )
end
timer.performWithDelay( 500, randomBackC, 0 )
end
local function cleanup()
   if backC.y >100 then
       backC:removeSelf()
     end
end
Runtime:addEventListener("enterFrame", cleanup)

これを引き起こしているもののアイデアはありますか?

4

1 に答える 1

3

Runtime:addEventListener("enterFrame", cleanup)のため、 backCはすでに削除されている可能性があります。

enterFrameは cleanup() を何度も呼び出すため、 backCを削除した後にenterFrameを削除する必要があります。複数のオブジェクトを作成する場合は、参照の問題が発生する可能性があるため、関数に対してのみローカルにします。

このような

local randomBackC = function()
    local backC = display.newImage("Cloud"..tostring(math.random(1, 4))..".png")
    backC.x = math.random (30, 450); backC.y = -20
    physics.addBody( backC, { density=2.9, friction=0.5, bounce=0.7, radius=24 } )

    local cleanup
    cleanup = function()
       if backC then
           if backC.y >100 then
               backC:removeSelf()
               backC = nil
               Runtime:removeEventListener("enterFrame", cleanup)
           end
       end
    end
    Runtime:addEventListener("enterFrame", cleanup)
end
timer.performWithDelay( 500, randomBackC, 0 )
于 2013-07-05T17:34:42.030 に答える