1

我对 Sprite Kit 游戏开发非常陌生。我目前正在开发我的第一个游戏 - 一个简单的游戏,玩家必须通过障碍物导航一个简单的对象。如果对象与障碍物碰撞 - GAME OVER。

我让它工作得很好,但我在动画问题上被困了一个多星期。几天来,我一直在寻找答案……但没有成功。所以基本上......当我的对象被导航越过障碍物时,我有一个动画模式(效果很好)。然而,一旦它碰到障碍物,我希望动画模式改变(变成爆炸)。出于某种原因,这并没有发生!:( 基本上完全忽略了这两行代码([self stopBeeAnimation]; 和 [selfbeatAnimation];)我添加了,游戏马上就结束了。

非常感谢我可能得到的任何帮助(这让我发疯):)

太感谢了。

这是我的代码:

-(void)didBeginContact:(SKPhysicsContact *)contact {


SKSpriteNode *firstSprite;
SKSpriteNode *secondSprite;

firstSprite = (SKSpriteNode *)contact.bodyA.node;
secondSprite = (SKSpriteNode *)contact.bodyB.node;


if ((contact.bodyA.categoryBitMask == beeCategory) && (contact.bodyB.categoryBitMask = obstacleCategory)) {

    [self stopBeeAnimation];
    [self defeatedAnimation];

    [obstacleArray removeAllObjects];
    [bee.physicsBody setAffectedByGravity:NO];
    [timer invalidate];
    scoreLabel.fontSize = 30;
    scoreLabel.text = [NSString stringWithFormat:@"GAME OVER %d", score/2];


    [self removeFromParent];
    SKTransition *transition = [SKTransition fadeWithDuration:5];
    [self.scene.view presentScene:[[NPMyScene alloc]initWithSize:self.size] transition:transition];
}}

和:

    -(void) defeatedAnimation {
    SKAction *defeatedAnimation;
    NSMutableArray *textures2 =[NSMutableArray arrayWithCapacity:5];
    for (int a = 1; a < 6; a++) {
        NSString *textureName2 = [NSString stringWithFormat:@"defeated%d", a];
        SKTexture *texture2 = [SKTexture textureWithImageNamed:textureName2];
        [textures2 addObject:texture2];
    }
    defeatedAnimation = [SKAction animateWithTextures:textures2 timePerFrame:0.2];
}
4

1 回答 1

0

看这里:

SKTransition *transition = [SKTransition fadeWithDuration:5];
[self.scene.view presentScene:[[NPMyScene alloc]initWithSize:self.size] transition:transition];

在尝试运行动画后,您正在视图中呈现不同的场景(或者可能是同一场景类的另一个实例?)。当前场景中的任何动画更改都将不可见,因为新场景替换了当前场景。

但即使在那之前...

- (void)defeatedAnimation {
    // ...
   defeatedAnimation = [SKAction animateWithTextures:textures2 timePerFrame:0.2];
}

你正在创建一个SKAction但没有用它做任何事情。要使操作生效,您需要在具有runAction:.

于 2014-05-05T21:21:46.907 回答