动画的最后一帧仍然在屏幕上(SKTextureAtlas,SpriteKit)

时间:2014-06-24 15:54:28

标签: animation ios7 sprite-kit

刚开始使用SpriteKit。可能是因为我是初学者,而且我遗漏了一些非常基本的东西,但我对这部分代码有疑问。

我创建了逐帧爆炸动画。我删除了原始节点(一个球),在它的位置我启动了这个explosionParent方法(因为它的大小比原始对象大)。在里面我创建了一个SKSpriteNode,然后在它上面运行动画。在这之后,我检查动画是否完成,如果是这样,我擦除了explosionParent节点。

爆炸出现并且运行平稳,但动画的最后一帧仍然在屏幕上(和节点本身)。我做错了什么?我想我会混合概念,但我认为在这里分享它会是一个很好的经历。提前致谢!

-(void) explosionParent:(float)positionX and:(float)positionY {

SKSpriteNode *explosionParent = [SKSpriteNode spriteNodeWithImageNamed:@"Explosion 1"];

explosionParent.name = @"explosionParent";
explosionParent.position = CGPointMake(positionX,positionY);

[self addChild:explosionParent]; // Creating child for the explosion


// Starting animation

SKTextureAtlas *atlas = [SKTextureAtlas atlasNamed:@"RedExplosion"];

SKTexture *explosion1 = [atlas textureNamed: @"explosion-1-Red.png"];
SKTexture *explosion2 = [atlas textureNamed: @"explosion-2-Red.png"];
SKTexture *explosion3 = [atlas textureNamed: @"explosion-3-Red.png"];
SKTexture *explosion4 = [atlas textureNamed: @"explosion-4-Red.png"];
SKTexture *explosion5 = [atlas textureNamed: @"explosion-5-Red.png"];
SKTexture *explosion6 = [atlas textureNamed: @"explosion-6-Red.png"];
SKTexture *explosion7 = [atlas textureNamed: @"explosion-7-Red.png"];

NSArray *atlasTextures = @[explosion1,explosion2,explosion3,explosion4,explosion5,explosion6,explosion7];

SKAction *explosionAnimation = [SKAction animateWithTextures:atlasTextures timePerFrame:1.0f/30.0f];


[explosionParent runAction:explosionAnimation] ;  // launching the animation itself


// Killing the explosion node if the action has finished

if (![explosionParent hasActions])   
{
    [explosionParent removeFromParent];
}

}

1 个答案:

答案 0 :(得分:0)

您的问题在于if (![explosionParent hasActions]),它还没有完成其操作。相反,你应该考虑做的是将一些动作链接在一起,一个动画,然后从中移除节点。您可以使用+ (SKAction *)sequence:(NSArray *)actions执行此操作。