sprite套件-更新物理体时,SKAction moveTo动画



我有一个来回移动的"条",我已经正确地让它从右向左移动精灵。然而,物理体似乎仍然在原来的地方。我可以与'bar'接触,即使它已经动画了。

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

- (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)或使用(SKPhysicsBody *)bodyWithRectangleOfSize:(CGSize)s center:(CGPoint)center,允许您设置中心坐标。

最新更新