【问题标题】:SpriteKit - Change Animation at SKPhysicsContactSpriteKit - 在 SKPhysicsContact 更改动画
【发布时间】:2014-05-05 20:54:51
【问题描述】:

我对 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];
}

【问题讨论】:

    标签: animation sprite-kit flappy-bird-clone


    【解决方案1】:

    看这里:

    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: 的节点上运行它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-03
      • 1970-01-01
      • 2017-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-05
      相关资源
      最近更新 更多