我已经摆弄这个话题大约三个月了。我认为这只是苹果很快会修复的一个临时错误,并将其推迟到开发结束。现在我的游戏快结束了,但我仍然找不到好的解决方法:
如果我有一个 SKShapeNode
并向其添加物理体,我不能再使用 setPositionCGPoint)
方法来更改位置。我的对象总是被放置在其父 View 的 (0,0) 处。
我已尝试在 didSimulatePhysics
方法中设置位置,以确保完成所有物理计算。
我尝试使用 SKAction
从 similar 移动节点和其他建议questions here .没有一个按预期工作。
对我来说唯一(某种)可行的解决方案是使用这种解决方法:
- (void)setPositionWorkaroundCGPoint)p {
CGVector vel = self.physicsBody.velocity;
CGFloat angVel = self.physicsBody.angularVelocity;
SKPhysicsBody *temp = self.physicsBody;
self.physicsBody = nil;
[self setPosition:p];
[self setPhysicsBody:temp];
[self.physicsBody setVelocity:vel];
[self.physicsBody setAngularVelocity:angVel];
}
奇怪的是,这个方法只工作一次。每次我调用这个方法时,位置都会设置为第一个调用参数,即使初始调用没有留下任何数据。我检查了无数次参数和坐标系。
有人遇到同样的问题并找到了可行的解决方案吗?
在这个问题上折腾了很久,终于找到了解决办法。
因此,由于 SpriteKit 的更新相对较新(3-4 个月前),我无法移动任何附有 SKPhysicsBody
的 SKNode
子类。 setPositionCGPoint)position
和 [SKAction move…]
都不起作用。
在我的情况下,删除 SKPhysicsBody
并设置位置不起作用,因为出于性能原因,我使用了一个回收我的 SKShapeNode
的池。但是,池并没有删除附加的 SKPhysicBodies
。
所以:如果您遇到此问题,请确保从节点和子节点中删除所有 SKPhysicBody
对象。
关于ios - 无法使用物理体设置位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35484692/
欢迎光临 OGeek|极客世界-中国程序员成长平台 (https://ogeek.cn/) | Powered by Discuz! X3.4 |