Ios 无法使用physicsbody设置位置

Ios 无法使用physicsbody设置位置,ios,objective-c,sprite-kit,Ios,Objective C,Sprite Kit,到现在为止,我已经花了大约三个月的时间来处理这个话题。我认为这只是苹果公司很快就会修复的一个暂时性缺陷,并将其推迟到开发结束。现在我的游戏快结束了,我仍然找不到好的解决方法: 如果我有一个SKShapeNode并向其添加一个物理体,我就不能再使用setPosition:(CGPoint)方法来更改位置。我的对象始终位于其父视图的(0,0) 我尝试在didSimulatePhysics方法中设置位置,以确保所有物理计算都已完成 我尝试使用SKAction从中移动节点和其他建议。没有一个像预期的那样

到现在为止,我已经花了大约三个月的时间来处理这个话题。我认为这只是苹果公司很快就会修复的一个暂时性缺陷,并将其推迟到开发结束。现在我的游戏快结束了,我仍然找不到好的解决方法:

如果我有一个
SKShapeNode
并向其添加一个物理体,我就不能再使用
setPosition:(CGPoint)
方法来更改位置。我的对象始终位于其父视图的(0,0)

我尝试在
didSimulatePhysics
方法中设置位置,以确保所有物理计算都已完成

我尝试使用
SKAction
从中移动节点和其他建议。没有一个像预期的那样起作用

对我来说,唯一(种类)可行的解决方案是使用这种变通方法:

- (void)setPositionWorkaround:(CGPoint)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
子类<代码>设置位置:(CGPoint)位置和
[SKAction move…]
都不起作用

在我的例子中,删除
SKPhysicsBody
并设置位置不起作用,因为出于性能原因,我使用的池回收了我的
SKShapeNode
s。但是池没有删除附加的
SKPhysicBodies


因此:如果您有此问题,请确保从节点和子节点中删除所有
skphysicacbody
对象。

这不是我所知道的任何apple错误,您确定关闭了动力学还是受重力影响关闭了动力学?我写了一个快速的示例应用程序,它可以很好地工作。当重力关闭时,我尝试打开/关闭动力学标志。一切正常,在iOS更新后,iPhone 6、6+和iPad上的这种行为发生了变化。都是在同一次更新之后。正是这个更新让很多开发者的SKEmitterNode行为变得一团糟。我可能需要更多的信息,因为我无法重现你的bug。我有一个
SKShapeNode
那是一个圆,我拍一个
SKPhysicsBody
那是一个半径相同的圆,然后我在触摸时调用设置位置。我在节点内部有一个相当复杂的设置。我将解剖它并公布我的结果。你的物理身体有多大?也许它比ShapeNode大得多。这可能会导致碰撞,从而阻止您的移动。也许你可以在didBeginContact中添加一个断点来检查这是否有效,谢谢!他们引入这样的bug真让人沮丧。@Crashalot是的,与Spritekit合作纯粹是痛苦。。。我最近发表了一篇关于它的博客文章。希望你能完成你的项目:)真的,这样不必要的痛苦。不过,将Unity应用程序强制安装到iOS上也会带来一些问题。因为我目前正在试验虚幻引擎和Unity,我很想听听你遇到的麻烦。。。你有没有在博客上分享过?对不起,我不是有意建议我们使用Unity。。。只是分享了其他开发者的经验,他们使用Unity并试图将这款游戏强制应用到苹果的应用程序中。