Objective c SKAction下带有SKPhysicsBody的SKNodes移动不准确

Objective c SKAction下带有SKPhysicsBody的SKNodes移动不准确,objective-c,sprite-kit,skphysicsbody,skaction,sknode,Objective C,Sprite Kit,Skphysicsbody,Skaction,Sknode,我有两个学习物理的SKNode(一个接一个): 他们的目标是到达一个预定的位置,在某个距离上与他们直接相对 为了实现这一点,我使用SKAction(这很重要,不能更改): 此外,在第一个节点的移动路径上,我放置了第三个节点-完全相同 - (void)createSceneContents { ... SKNode *obstacle = [self newNode]; obstacle = CGPointMake(500,300); [self addChild

我有两个学习物理的SKNode(一个接一个):

他们的目标是到达一个预定的位置,在某个距离上与他们直接相对

为了实现这一点,我使用SKAction(这很重要,不能更改):

此外,在第一个节点的移动路径上,我放置了第三个节点-完全相同

 - (void)createSceneContents {
    ...
    SKNode *obstacle = [self newNode];
    obstacle = CGPointMake(500,300);
    [self addChild:obstacle];
 }
第三个节点必须通过物理机制沿第一个节点的运动方向移动

(红色圆圈标记节点的目标位置)

然后我运行应用程序,一切都按照设想进行,除了一件事——第一个节点(路径上有障碍物)没有到达目标位置,只有几个像素:

问题很简单:为什么?我怎样才能修好它?
谢谢大家!

如果要对碰撞作出响应,为什么要通过动作移动节点?你不能把这两者混在一起。为什么?因为你会以两种不同的方式影响精灵的位置,而skaction和物理引擎的效果会相互干扰,所以你最终会得到奇怪的结果。当然,接触检测会起作用,你可以将改变节点位置的动作与物理相混合,但如果你的节点发生碰撞,那么你很可能会陷入混乱。@Whirlwind-是的,我需要这种混合来检测碰撞,然后更准确地移动第三个节点(障碍物)。是的,我也可以通过SKAction移动障碍物节点,但如果没有节点重叠,则很难对其设置动画。第一步我必须采取行动(而不是物理),因为全球游戏逻辑需要它(游戏本身不是基于物理的),我想你在这里混合了一些术语。当你说碰撞检测可能是指接触检测。。。它在未设置冲突位掩码的情况下工作。但您设置了碰撞位遮罩,所以我觉得您的节点与她或她的身体发生碰撞,而您试图使用一定会打乱节点定位的动作来移动它们。谢谢@Whirlwind!是的,我尝试实现两个目标1)检测接触-运行相关的游戏逻辑2)使用碰撞机制制作漂亮的动画,同时两个节点移动时没有重叠为什么要通过动作移动节点,如果它们是为了响应碰撞?你不能把这两者混在一起。为什么?因为你会以两种不同的方式影响精灵的位置,而skaction和物理引擎的效果会相互干扰,所以你最终会得到奇怪的结果。当然,接触检测会起作用,你可以将改变节点位置的动作与物理相混合,但如果你的节点发生碰撞,那么你很可能会陷入混乱。@Whirlwind-是的,我需要这种混合来检测碰撞,然后更准确地移动第三个节点(障碍物)。是的,我也可以通过SKAction移动障碍物节点,但如果没有节点重叠,则很难对其设置动画。第一步我必须采取行动(而不是物理),因为全球游戏逻辑需要它(游戏本身不是基于物理的),我想你在这里混合了一些术语。当你说碰撞检测可能是指接触检测。。。它在未设置冲突位掩码的情况下工作。但您设置了碰撞位遮罩,所以我觉得您的节点与她或她的身体发生碰撞,而您试图使用一定会打乱节点定位的动作来移动它们。谢谢@Whirlwind!是的,我尝试实现两个目标1)检测接触-运行相关的游戏逻辑2)使用碰撞机制制作漂亮的动画,同时两个节点移动时不重叠
[n1 runAction:[SKAction moveTo:CGPointMake(800,100) duration:3]];
[n2 runAction:[SKAction moveTo:CGPointMake(800,300) duration:3]];
 - (void)createSceneContents {
    ...
    SKNode *obstacle = [self newNode];
    obstacle = CGPointMake(500,300);
    [self addChild:obstacle];
 }