【发布时间】:2014-03-09 12:11:05
【问题描述】:
我在SKNode *_fgLayer 上有一个带有动态物理体的 SKSpriteNode。
现在,当我暂停或取消暂停游戏时,我希望 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。
-
或者尝试设置scene.physicsWorld.speed = 0.0 (developer.apple.com/Library/ios/documentation/SpriteKit/…)
-
更新:一种解决方法是使影响 phsyicsBody 节点的所有方面保持稳定。我使用以下代码暂停和取消暂停类似的代码:_fish.physicsBody.affectedByGravity = NO; _fish.physicsBody.allowsRotation = 否; _fish.physicsBody.velocity = CGVectorMake(0, 0); _fish.physicsBody.angularVelocity = 0;
-
scene.physicsWorld.speed = 0.0 做得很好!谢谢!
标签: objective-c sprite-kit game-physics skspritenode skphysicsworld