暂停精灵套件游戏与物理不';无法在iOS 9上正常工作

暂停精灵套件游戏与物理不';无法在iOS 9上正常工作,ios,sprite-kit,skspritenode,skphysicsbody,Ios,Sprite Kit,Skspritenode,Skphysicsbody,我有一个问题,暂停与物理精灵工具包游戏。游戏包含一个在精灵场景中移动的球,具有以下参数: self.ball.physicsBody.friction = 0; self.ball.physicsBody.linearDamping = 0; self.ball.physicsBody.restitution = 1.0f; self.ball.physicsBody.affectedByGravity = NO; self.ball.physicsBody.usesPreciseCollisi

我有一个问题,暂停与物理精灵工具包游戏。游戏包含一个在精灵场景中移动的球,具有以下参数:

self.ball.physicsBody.friction = 0;
self.ball.physicsBody.linearDamping = 0;
self.ball.physicsBody.restitution = 1.0f;
self.ball.physicsBody.affectedByGravity = NO;
self.ball.physicsBody.usesPreciseCollisionDetection = YES;
问题是,当我暂停游戏时,我调用以下方法:

self.scene.physicsWorld.speed = 0;
self.ball_velocity = self.ball.physicsBody.velocity;
self.ball.physicsBody.velocity = CGVectorMake(0, 0);
self.ball.speed = 0;
self.ball.physicsBody.dynamic = NO;
[self.scene.view setPaused:YES];
恢复时,请调用以下命令:

self.scene.physicsWorld.speed = 1;
self.ball.physicsBody.velocity = self.ball_velocity;
self.ball.physicsBody.dynamic = YES;
self.ball.speed = 1;
[self.scene.view setPaused:NO];
这将停止球动画,但当继续时,球的位置将发生更改,并且似乎球在暂停期间移动

顺便说一句,它在iOS 8上运行良好,但在iOS 9上总是失败


有什么建议吗

聊天之后,我们得出结论,在iOS8和iOS9之间,苹果做了一个改变,暂停场景现在暂停更新循环。由于更新循环正在暂停,因此未正确计算时间更改。现在发生的是,时间的变化将是非暂停时间-暂停时间,模拟延迟状态。速度将使数学生效,并基于此时间差移动对象。要解决此问题,只需创建一个包含所有场景对象的父节点,然后暂停父节点。这将允许仍然调用更新,从而允许时间上的更改与帧速率保持一致。

是否总是发生这种情况?尝试两种情况:1。暂停游戏,并立即取消暂停。2.暂停游戏,等待几秒钟,然后取消暂停。在可能发生的情况下,尝试观察fps,即在视图取消暂停后立即出现一些延迟。当场景暂停/取消暂停时,不会发生这种情况。因此,您可以暂停场景而不是视图。似乎球在暂停期间继续运动,取消暂停后,球会立即转移到新位置。我试图暂停场景本身,但同样的错误发生了!!!真奇怪。如果我暂停这个场景,我就不能说出你在说什么。事实上,只有快速暂停/取消暂停视图,我才能生成您所说的内容。你使用什么Xcode、设备和模拟器?问题是你在哪里调用暂停和恢复,速度是你唯一用来移动精灵的东西,还是你有动作?我在iOS 8上测试过它,它工作正常-暂停和恢复正确-但在iOS 9上,无论我是否快速暂停,这个问题总是发生@奈特0Fdragon:我在按下按钮时调用暂停和恢复,球没有动作,只有速度。顺便说一句,在iOS 8上,它只适用于[self.scene setPaused:YES]。只是一个重要提示,设置ball.paused only在iOS 9上不起作用,它在iOS 8上可以正常工作。为了解决这个问题,我将球的速度设置为0,然后在恢复后,我将球的速度设置为正常速度。是的,这似乎不是答案,我们必须有一些你正在做的事情。我编写了一个暂停场景的示例应用程序,物理的速度并不是基于更新计时器,无论是慢暂停还是快暂停,我的精灵都完全按照预期移动。此示例也适用于iOS 8和iOS 9。@AmaniElsaed,如果你想测试一下,我感觉你可能在做一些不正确的事情。创建一个新的spritekit应用程序,在本例中,将制作精灵的触摸代码移动到“移动到视图”区域,而不是使用SKAction旋转,将其取出,添加一个物理实体,并将速度设置为-30,0。那就让触摸自己吧。暂停=!赛尔夫停顿了一下。你的精灵应该以预期的速度移动