暂停带有物理引擎SKSpriteNode子节点的SpriteKit游戏

7

我有一个带有动态物理体的SKSpriteNode,放在SKNode *_fgLayer上。

现在,当我暂停或取消暂停游戏时,我希望该SKSpriteNode保持原地不旋转也不掉下来。如果我只是使用_fgLayer.paused = YES;,那么SKSpriteNode不会停留在原地,而是会旋转并掉下来。如果我在暂停时设置physicsBody.dynamic = NO;,并在取消暂停时设置physicsBody.dynamic = YES;,那么它可以正常工作。

然而,经过几次尝试之后,我总是会遇到以下崩溃:

"Assertion failed: (typeA == b2_dynamicBody || typeB == b2_dynamicBody), function SolveTOI, file /SourceCache/PhysicsKit/PhysicsKit-4.6/PhysicsKit/Box2D/Dynamics/b2World.cpp, line 670."

所以,我猜测将physicsBody.dynamic = NO;设置回去不起作用。

有没有人有想法
如何让动态物理体在暂停游戏时保持原地?


我认为在这里你应该使用sprite.speed = 0.0。 - AndrewShmig
或者尝试设置scene.physicsWorld.speed = 0.0(https://developer.apple.com/Library/ios/documentation/SpriteKit/Reference/SKPhysicsWorld_Ref/Introduction/Introduction.html#//apple_ref/occ/instp/SKPhysicsWorld/speed) - AndrewShmig
更新:一个解决方法是让影响节点的所有方面从物理体保持稳定。我使用了以下代码来暂停,类似的代码用于取消暂停: _fish.physicsBody.affectedByGravity = NO; _fish.physicsBody.allowsRotation = NO; _fish.physicsBody.velocity = CGVectorMake(0, 0); _fish.physicsBody.angularVelocity = 0; - μ4ρκ05
场景.physicsWorld.speed = 0.0做得很好!谢谢! - μ4ρκ05
2个回答

23

你如何恢复之前的进度?当你想要恢复时,你将重置到什么速度? - Peter Peng
2
我的错,我刚刚看了苹果的文档。可以设置scene.physicsWorld.speed = 1.0来恢复。1表示正常速度,2将是正常速度的两倍快。 - Peter Peng

3

将scene.view.paused设置为YES对我很有效-特别是当子节点上有动作运行时。

self.scene.view setPaused:YES


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接