ios - 暂停 Sprite Kit 物理游戏在 iOS 9 上无法正常工作

标签 ios sprite-kit skspritenode skphysicsbody

我在使用物理暂停 sprite 套件游戏时遇到问题。游戏包含一个在 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 上它总是失败。

有什么建议吗?!!

最佳答案

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

关于ios - 暂停 Sprite Kit 物理游戏在 iOS 9 上无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34764168/

相关文章:

ios - 如何在 ios swift 中制作可滚动的标签栏?

ios - 使用头部或尾部来选择将生成的 Sprite 之间的位置,并选择 Sprite 移动的速度

swift - 在touchesMoved函数中移动2个不同的Spritenode

ios - 设置永久 SKSpritenode 图像方向

ios - 如何禁用用户在页面 View 中滑动,但仍启用与页面 View 中的 subview 的交互。前任。按钮

ios - UIAutomation 和 NSNotification

ios - 如何在 iOS 应用程序中永久存储一组图像 - Swift

ios - 如何在 Swift 中为 SpriteKit 定义类别位掩码枚举?

ios - 如何从 SKSpriteNode 获取颜色?

swift - 使用场景编辑器获取 SKSpriteNode 的 userData