ios - 无法使用物理体设置位置
<p><p>我已经摆弄这个话题大约三个月了。我认为这只是苹果很快会修复的一个临时错误,并将其推迟到开发结束。现在我的游戏快结束了,但我仍然找不到好的解决方法:</p>
<p>如果我有一个 <code>SKShapeNode</code> 并向其添加物理体,我不能再使用 <code>setPosition:(CGPoint)</code> 方法来更改位置。我的对象总是被放置在其父 View 的 <strong>(0,0)</strong> 处。</p>
<p>我已尝试在 <code>didSimulatePhysics</code> 方法中设置位置,以确保完成所有物理计算。</p>
<p>我尝试使用 <code>SKAction</code> 从 <a href="https://stackoverflow.com/questions/20937932/change-position-of-a-skspritenode-that-has-a-physicsbody" rel="noreferrer noopener nofollow">similar</a> 移动节点和其他建议<a href="https://stackoverflow.com/questions/20359060/skspritenode-position-changes-to-0-0-for-no-reason" rel="noreferrer noopener nofollow">questions</a> <a href="https://stackoverflow.com/questions/21370597/sknode-position-not-working-always-going-to-default-0-0" rel="noreferrer noopener nofollow">here</a> .没有一个按预期工作。</p>
<p>对我来说唯一(某种)可行的解决方案是使用这种解决方法:</p>
<pre><code>- (void)setPositionWorkaround:(CGPoint)p {
CGVector vel = self.physicsBody.velocity;
CGFloat angVel = self.physicsBody.angularVelocity;
SKPhysicsBody *temp = self.physicsBody;
self.physicsBody = nil;
;
;
;
;
}
</code></pre>
<p><strong>奇怪的是,这个方法只工作一次。</strong>每次我调用这个方法时,位置都会设置为第一个调用参数,即使初始调用没有留下任何数据。我检查了无数次参数和坐标系。</p>
<p>有人遇到同样的问题并找到了可行的解决方案吗?</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>在这个问题上折腾了很久,终于找到了解决办法。</p>
<p>因此,由于 SpriteKit 的更新相对较新(3-4 个月前),我无法移动任何附有 <code>SKPhysicsBody</code> 的 <code>SKNode</code> 子类。 <code>setPosition:(CGPoint)position</code> 和 <code></code> 都不起作用。</p>
<p>在我的情况下,删除 <code>SKPhysicsBody</code> 并设置位置不起作用,因为出于性能原因,我使用了一个回收我的 <code>SKShapeNode</code> 的池。但是,池并没有删除附加的 <code>SKPhysicBodies</code>。</p>
<p>所以:<strong>如果您遇到此问题,请确保从节点和子节点中删除所有 <code>SKPhysicBody</code> 对象。</strong></p></p>
<p style="font-size: 20px;">关于ios - 无法使用物理体设置位置,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/35484692/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/35484692/
</a>
</p>
页:
[1]