刚开始使用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];
}
}
答案 0 :(得分:0)
您的问题在于if (![explosionParent hasActions])
,它还没有完成其操作。相反,你应该考虑做的是将一些动作链接在一起,一个动画,然后从中移除节点。您可以使用+ (SKAction *)sequence:(NSArray *)actions
执行此操作。