设置Sprite Node的Physics Body会开始闪烁动画

时间:2014-03-17 13:30:06

标签: ios sprite-kit

我设置了一个精灵节点,它被设置为以圆周运动方式移动。

这是代码。

-(void) setUpMonkey{

SKTexture * monkey1 =[SKTexture textureWithImageNamed:@"monkey_walk_right_1_angle.png"];
SKTexture *monkey2= [SKTexture textureWithImageNamed:@"monkey_walk_right_2_angle.png"];
monkey1.filteringMode = SKTextureFilteringNearest;

monkey2.filteringMode = SKTextureFilteringLinear;

SKAction *_walking = [SKAction repeatActionForever: [SKAction animateWithTextures:@[monkey1,monkey2] timePerFrame:0.2]];

_monkey =[SKSpriteNode spriteNodeWithTexture:monkey1];

[_monkey runAction:_walking];
[_monkey setScale:0.5];
[self addChild:_monkey];

CGMutablePathRef circleMonkey = CGPathCreateMutable();
CGPathAddArc(circleMonkey, NULL, CGRectGetMidX(self.frame), CGRectGetMidY(self.frame), 80 + _monkey.frame.size.height/2, 0, M_PI*2, YES);
SKAction *followTrack = [SKAction followPath:circleMonkey asOffset:NO orientToPath:YES
                                    duration:5.0];

SKAction *forever = [SKAction repeatActionForever:followTrack];

[_monkey runAction:forever];
}

这很有效。 但是一旦我设置了_monkey(SKSpriteNode)的Physics Body属性,

-(void) setUpMonkey{

SKTexture * monkey1 =[SKTexture textureWithImageNamed:@"monkey_walk_right_1_angle.png"];
SKTexture *monkey2= [SKTexture textureWithImageNamed:@"monkey_walk_right_2_angle.png"];
monkey1.filteringMode = SKTextureFilteringNearest;

monkey2.filteringMode = SKTextureFilteringLinear;

SKAction *_walking = [SKAction repeatActionForever: [SKAction animateWithTextures:@[monkey1,monkey2] timePerFrame:0.2]];

_monkey =[SKSpriteNode spriteNodeWithTexture:monkey1];

[_monkey runAction:_walking];
[_monkey setScale:0.5];

_monkey.physicsBody =[SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(_monkey.frame.size.width , _monkey.frame.size.height)];
[self addChild:_monkey];


CGMutablePathRef circleMonkey = CGPathCreateMutable();
CGPathAddArc(circleMonkey, NULL, CGRectGetMidX(self.frame), CGRectGetMidY(self.frame), 80 + _monkey.frame.size.height/2, 0, M_PI*2, YES);
SKAction *followTrack = [SKAction followPath:circleMonkey asOffset:NO orientToPath:YES
                                    duration:5.0];

SKAction *forever = [SKAction repeatActionForever:followTrack];

[_monkey runAction:forever];
}

整个动画搞砸了。它开始闪烁,精灵也开始以椭圆运动方式移动。 设置PhysicsBody会发生什么?

P.S 我是iOS开发的初学者。

1 个答案:

答案 0 :(得分:1)

不要使用物理学并一起移动/跟随动作。

物理体将通过力和手动速度变化移动节点。使用改变节点位置的动作会混淆物理行为,反之亦然。坚持一个或另一个。

最好你可以禁用物理体的重力,最好也禁用任何碰撞反馈。然后你可以通过动作移动物理体的节点,并且仍然能够依靠物理接触回调来报告接触(但是身体应该解决碰撞力,否则你会再次遇到同样的问题)。