SpriteKit 在碰撞时随机冻结

SpriteKit randomly freezes on collision

我正在开发我的第一款 SpriteKit 游戏,遇到了这个非常令人沮丧的错误。我有一个节点是玩家和他们必须获得的物品。当玩家与物品发生碰撞时(我正在对物理体进行此检查),物品会移动到屏幕上的随机位置。

事实是,这种随机碰撞(五分之一)会导致游戏冻结而不会出现任何错误。我试图查看我的任何代码是否是 运行 无限循环,但代码使它到达 update: 方法的末尾就好了。

所以我在SpriteKit循环的不同点添加了一堆打印语句,发现它冻结后甚至没有到达didEvaluateActions

我还检查了仪器,看看哪些方法正在耗尽 CPU(当它冻结时,它会上升到 100%),这就是我发现的:

任何帮助将不胜感激,提前致谢。

发现问题的根源是在程序根据图片评估动作时发生的here

冻结的原因是我无意中创建了一个无限循环,通过永远调用一个时间为arc4random() % 5的动作,当它出现为0时创建了一个无限循环。

在这种情况下你可以写arc4random() % 5 + 1这意味着系统会生成一个介于1和5之间的随机数。它不会再次return 0。