Sprite kit 使用SKAction moveTo设置动画时更新物理实体

Sprite kit 使用SKAction moveTo设置动画时更新物理实体,sprite-kit,skspritenode,skaction,Sprite Kit,Skspritenode,Skaction,我有一个“酒吧”来回移动,我已经正确地让它从右向左移动精灵。然而,物理体似乎仍然在原来的位置。我可以与“条”接触,即使它已设置动画 有人知道我怎么解决这个问题吗 - (void)setupBars { leftBar = [BarNode new]; leftBar.anchorPoint = CGPointMake(0, 0); leftBar.name = @"leftBar"; leftBar.size = CGSizeMake(CGRectGetMidX(

我有一个“酒吧”来回移动,我已经正确地让它从右向左移动精灵。然而,物理体似乎仍然在原来的位置。我可以与“条”接触,即使它已设置动画

有人知道我怎么解决这个问题吗

- (void)setupBars
{
    leftBar = [BarNode new];
    leftBar.anchorPoint = CGPointMake(0, 0);
    leftBar.name = @"leftBar";
    leftBar.size = CGSizeMake(CGRectGetMidX(self.frame), 50);
    [leftBar setPosition:CGPointMake(0, CGRectGetMidY(self.frame) + 275)];
    leftBar.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:leftBar.size];
    leftBar.physicsBody.dynamic = NO;
    leftBar.physicsBody.contactTestBitMask = nodeBitMask;
    [self addChild:leftBar];


    rightBar = [BarNode new];
    rightBar.anchorPoint = CGPointMake(0, 0);
    rightBar.name = @"rightBar";
    rightBar.size = CGSizeMake(CGRectGetMidX(self.frame), 50);
    [rightBar setPosition:CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame) + 275)];
    rightBar.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:rightBar.size];
    rightBar.physicsBody.dynamic = NO;
    rightBar.physicsBody.contactTestBitMask = nodeBitMask;
    [self addChild:rightBar];

    SKAction *moveLeftBar = [SKAction moveTo:CGPointMake(-160, leftBar.position.y) duration:1];
    SKAction *back = [SKAction moveTo:CGPointMake(0, leftBar.position.y) duration:1];
    SKAction *all = [SKAction sequence:@[moveLeftBar, back]];
    SKAction *repeat = [SKAction repeatActionForever:all];
    [leftBar runAction:repeat];

    moveLeftBar = [SKAction moveTo:CGPointMake(CGRectGetMidX(self.frame) + 160, rightBar.position.y) duration:1];
    back = [SKAction moveTo:CGPointMake(CGRectGetMidX(self.frame), rightBar.position.y) duration:1];
    all = [SKAction sequence:@[moveLeftBar, back]];
    repeat = [SKAction repeatActionForever:all];
    [rightBar runAction:repeat];


}

你几乎已经回答了你自己的问题。只是想让你自己去那里。SpriteKit的物理实体的问题在于,它们不会对锚点的变化做出反应。它们始终基于0.5,0.5,而不管您将节点的定位点设置为什么


您可以选择修改节点以使用默认定位点(0.5、0.5)或使用带有矩形大小:(CGSize)s center:(CGPoint)center的
(SKPhysicsBody*)body来设置中心坐标。

发布创建leftBar的代码。@sangony Ok posted,
BarNode
中的代码只是将纹理设置为图像。你是说,即使图像/纹理已移动,物理体仍保持在原位?您是否设置了skView.showsPhysics=是?是的,我的框似乎没有对齐,您可以检查我设置物理实体的线条吗?锚点围绕节点位置移动纹理…实际上物理实体已正确定位,但纹理未正确定位。默认定位点为(0.5,0.5)。只需删除这些线,你设置锚点,你会没事的。