我设置了一个精灵节点,它被设置为以圆周运动方式移动。
这是代码。
-(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开发的初学者。
答案 0 :(得分:1)
不要使用物理学并一起移动/跟随动作。
物理体将通过力和手动速度变化移动节点。使用改变节点位置的动作会混淆物理行为,反之亦然。坚持一个或另一个。
最好你可以禁用物理体的重力,最好也禁用任何碰撞反馈。然后你可以通过动作移动物理体的节点,并且仍然能够依靠物理接触回调来报告接触(但是身体应该解决碰撞力,否则你会再次遇到同样的问题)。