gpt4 book ai didi

lua - 使用 Storyboard库 [CORONA sdk] 恢复场景后,onCollision 中的 event.other 为零

转载 作者:行者123 更新时间:2023-12-01 19:55:01 25 4
gpt4 key购买 nike

我在使用 Corona SDK 进行开发时遇到了与碰撞检测和 Storyboard库相关的奇怪错误。

这是我的 onCollision 监听器:

local function onBottomBorderCollision( event )    
if (event.other.isBall) then
local index = table.indexOf( ballArray, other )
table.remove( ballArray, index )
event.other:removeSelf( )
event.other = nil
updateLife(false)
updateScore(false)
end
end

这在第一次启动时工作正常,但在返回到菜单屏幕(使用 storyboard.goToScene("menu")) 并重玩游戏后,现在此监听器将触发以下错误当我的一个球击中底部边框时:

attempt to index field "other"(a nil value)

我确实在 scene:onEnterScene(scene) 中创建了正确的监听器,因此与它们无关,而且另一个监听器永远不会生成错误:

local function onPlayerCollision( event )


if(event.other.isBall) then
xVel, yVel = event.other:getLinearVelocity( )
event.other:setLinearVelocity( event.other.XLinearVelocity, yVel )

end

end

我现在陷入困境...请帮忙!

最佳答案

实际上,此类错误主要是由于某些事件的函数调用/计时器/转换在更改场景之前尚未取消而引起的。

attempt to index field "other"(a nil value)

上面的错误提到任何对象/它的属性正在被调用/获取,但它不在当前事件或场景中。因此,请检查您是否正在取消计时器、转换和运行时事件监听器。

<小时/>

您的情况可能是由于运行时碰撞检测函数onBottomBorderCollision取消失败导致的。如果你在enterFrame中调用它,那么你必须在场景改变之前取消它。您可以按如下方式进行:

Runtime:removeEventListener("enterFrame",onBottomBorderCollision)
<小时/>

更新:碰撞检查运行时您无法停止物理引擎。因此,请执行以下操作:

function actualSceneChange()
physics.stop() -- stop physics here
-- call scene chage
director:changeScene("menuPageName") -- call your scene change method
end

function initiatingSceneChange()
physics.pause() -- pause physics here
-- stop unwanted event listeners
Runtime:removeEventListener("enterFrame",onBottomBorderCollision)

if(timer_1)then timer.cancel(timer_1) end -- stop all your timers like this.
if(trans_1)then transition.cancel(trans) end -- stop all your transitions like this.

timer.performWithDelay(1000,actualSceneChange,1)
end

关于lua - 使用 Storyboard库 [CORONA sdk] 恢复场景后,onCollision 中的 event.other 为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23972046/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com