我有一个问题,在暂停一个雪碧套件游戏与物理。该游戏包含一个在SpriteScene中移动的球,并具有以下参数:
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上总是失败的。
有什么建议吗?!
发布于 2016-01-13 17:23:47
聊天后,我们得出结论,在iOS8和iOS9之间,苹果做了一项改变,暂停了场景,暂停了更新循环。由于update循环正在暂停,因此没有正确计算时间上的更改。现在正在发生的是,时间的变化将是解除暂停的时间--暂停的时间,模拟一种滞后状态。速度将使数学生效,并根据这个时间差来移动物体。要解决此问题,只需创建一个父节点,该节点将容纳所有场景的对象,并暂停父节点。这将允许仍然调用更新,从而允许时间上的更改与帧速率保持一致。
https://stackoverflow.com/questions/34764168
复制相似问题