尝试致电全球游戏' (表值)

时间:2014-10-15 17:44:46

标签: lua corona

所以我正在使用onCollision事件进行一个小游戏:

local function onCollision(event)
    if event.phase == "began" and gameIsActive == true then
        local obj1 = event.object1; 
        local obj2 = event.object2; 

        if obj1.name == "bill" then
        if     obj2.name == "rocks" then gameover()
        elseif obj2.name == ""   then 
        end
    end
    end
end
Runtime:addEventListener( "collision", onCollision )

但我有一个问题,代码在第一次运行时按预期工作,但是你重启游戏我得到了这个错误:

File: game.lua 
Line: 649 
Attempt to call global 'gameover' (a table value) 

stack traceback: game.lua:649: in function <game.lua:643> ?: in function <?:221>

649 = if obj2.name == "rocks" then gameover()  
643 = local function onCollision(event)

知道这可能是什么吗?

gameover功能:

function gameover()

rightTAP:removeEventListener("tap", movePLAYERr) 
leftTAP:removeEventListener("tap", movePLAYERl) 

timer.pause(spawnBits)
timer.pause(Rockspawner1)
timer.pause(tmrscore)
timer.pause(updateScoretimer)
timer.pause(spawnDinosControll)

audio.pause( drillingChannel )

drillbg.isVisible = false
scoreText.isVisible = false

Restartg = display.newText( "Restart", 0, 0,nil, 20)
Restartg:setFillColor(0, 0, 0)
screenGroup:insert(Restartg)
Restartg.x= display.contentWidth/2
Restartg.y= display.contentHeight/2 + 160

Restartg:addEventListener("tap", RestartGame1)

end

4 个答案:

答案 0 :(得分:3)

错误消息很明确:您正在尝试调用gameover并且它具有表值而不是函数值。运行以下内容时会出现同样的错误:gameover = {}; gameover()

这意味着您未正确定义gameover函数或在脚本中的某处覆盖gameover值。

答案 1 :(得分:0)

如果您有一个函数对象,可以使用您用来声明的键调用。

例如

el = {}

print(el)
table: 0x7f8fe9e003f0

el.f1 = function()
print('hola')
end


el.f1()
hola

答案 2 :(得分:0)

重新启动时,您必须删除所有运行时侦听器。否则他们仍然会听,这可能会导致错误,因为它们会导致已经删除的方法。

将其放入RestartGame1:

Runtime:removeEventListener( "collision", onCollision )

答案 3 :(得分:-1)

通过添加&#34; transition.pause(thisRock)&#34;到了gameover功能