SpriteKit:使用操纵杆速度运行动画

时间:2013-10-30 22:26:36

标签: ios iphone xcode ipad sprite-kit

每当我改变操纵杆的方向时,我都会尝试执行播放器精灵的一些动画。

我正在使用TheSneakyNarwhal's drop in Joystick class,它使用以下方法:

if (joystick.velocity.x > 0)
{
    [self walkRightAnim];
}
else if (joystick.x < 0)
{
    [self walkLeftAnim];
}
if (joystick.velocity.y > 0)
{
    [self walkUpAnim];
}
else if (joystick.velocity.y < 0)
{
    [self walkDownAnim];
}
if (joystick.velocity.x == 0 && joystick.velocity.y == 0)
{
    [self idleAnim];
}

我的[self walkRightAnim];

- (void)walkRightAnim {

    NSLog(@"%f", self.joystick.velocity.x);

    SKTexture *run0 = [SKTexture textureWithImageNamed:@"right1.png"];
    SKTexture *run1 = [SKTexture textureWithImageNamed:@"right2.png"];
    SKTexture *run2 = [SKTexture textureWithImageNamed:@"right3.png"];
    SKAction *spin = [SKAction animateWithTextures:@[run0,run1,run2] timePerFrame:0.2 resize:YES restore:YES];
    SKAction *runForever = [SKAction repeatActionForever:run];
    [self.player runAction:runForever];
}

然而,只要操纵杆的velocity.x高于0(向右移动),它就会一直从头开始调用方法,并且实际上不会播放完整的动画。

只有当我停止使用操纵杆时才会播放整个动画。

1 个答案:

答案 0 :(得分:0)

当操纵杆速度改变时,您需要启动和循环动画,而不是每次操纵杆速度都是某个值时。现在,当操纵杆处于活动状态时,您每帧都会触发动画操作。

你需要找到一些方法来比较前一帧的操纵杆速度。例如,将先前的速度保持在ivar中,然后执行:

if (joystick.velocity.x != previous.velocity.x)
{
    if (joystick.velocity.x > 0)
    {
        [self walkRightAnim];
    }
    else if (joystick.velocity.x < 0)
    {
        [self walkLeftAnim];
    }
}

等等。请注意,这只适用于数字操纵杆,模拟操纵杆比较相等是不够的。