【问题标题】:Updating physics body when animating with SKAction moveTo使用 SKAction moveTo 动画时更新物理体
【发布时间】:2015-06-02 21:37:43
【问题描述】:

我有一个“条”来回移动,我已经正确地让它从右到左移动精灵。然而,物理体似乎仍然在原来的地方。即使它已经动画化,我也可以与“酒吧”联系。

有谁知道我该如何解决这个问题?

- (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];


}

【问题讨论】:

  • 贴出创建leftBar的代码
  • @sangony 好的,BarNode 中的代码只是将纹理设置为图像。
  • 您是说即使图像/纹理移开后物理体仍保持原位?你设置了 skView.showsPhysics = YES 吗?
  • 是的,我的盒子好像没有排成一行,你能检查一下我设置物理体的地方吗?
  • 锚点围绕节点位置移动纹理...实际上物理体已正确定位,但您的纹理没有。默认锚点为 (0.5, 0.5)。只需删除您设置锚点的那些行就可以了。

标签: sprite-kit skspritenode skaction


【解决方案1】:

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

您的选择是修改您的节点以使用默认锚点(0.5、0.5)或使用(SKPhysicsBody *)bodyWithRectangleOfSize:(CGSize)s center:(CGPoint)center,让您设置中心坐标。

【讨论】:

    猜你喜欢
    • 2014-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-21
    • 1970-01-01
    • 2017-12-14
    • 2016-10-28
    相关资源
    最近更新 更多