Sprite Kit创建动画对象

时间:2014-02-13 10:25:31

标签: ios objective-c sprite-kit

我有以下代码来创建动画纹理:

-(void) setUpActions {
    SKTextureAtlas * atlas = [SKTextureAtlas atlasNamed:@"player"];

    // Running player animation
    SKTexture * runTexture1 = [atlas textureNamed:@"player1.png"];
    SKTexture * runTexture2 = [atlas textureNamed:@"player2.png"];
    SKTexture * runTexture3 = [atlas textureNamed:@"player3.png"];
    SKTexture * runTexture4 = [atlas textureNamed:@"player4.png"];
    SKTexture * runTexture5 = [atlas textureNamed:@"player5.png"];
    SKTexture * runTexture6 = [atlas textureNamed:@"player6.png"];
    SKTexture * runTexture7 = [atlas textureNamed:@"player7.png"];
    SKTexture * runTexture8 = [atlas textureNamed:@"player8.png"];

    NSArray * runTexture = @[runTexture1, runTexture2, runTexture3, runTexture4, runTexture5, runTexture6, runTexture7, runTexture8];

    runAnimation = [SKAction animateWithTextures:runTexture timePerFrame:0.06 resize:YES restore:NO];

    SKSpriteNode * playerNode = (SKSpriteNode *)[self childNodeWithName:@"player"];
    [playerNode runAction:[SKAction repeatActionForever:runAnimation]];
}

这会创建精灵节点,并以另一种方法添加到场景中:

-(SKSpriteNode *)createPlayer {
    SKSpriteNode *player = [SKSpriteNode spriteNodeWithImageNamed:@"player"];
    player.position = CGPointMake(100, 160);
    player.name = @"player";
    player.zPosition = 100;

    return player;
}

这样做,我不得不创建一个具有静态图像的对象,并用动画纹理覆盖它。如何在没有默认静态图像的情况下创建动画对象?

1 个答案:

答案 0 :(得分:1)

动画操作只能在实际实例化的SKSpriteNode对象上执行,但是,您只需创建一个“空白”节点,然后对其执行动画操作:

SKSpriteNode *player = [SKSpriteNode node]; // instead of the static player sprite

或者,如果您希望空白节点具有特定大小,以便它在动画之前响应特定区域中的触摸/碰撞,例如,尝试使用清晰的矩形:

SKSpriteNode *player = [SKSpriteNode spriteNodeWithColor:[SKColor clearColor] size:(CGSizeHere)];

或许你想使用动画的第一帧作为精灵的纹理:

SKTexture *temp = runTexture[0];
SKSpriteNode *player = [SKSpriteNode spriteNodeWithTexture:temp];