【发布时间】: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