我在做什么:
我通过重复计时器每隔几秒钟设置一次炸弹,不断调用以下方法。
//in my init method
SKTexture *Bomb5 = [SKTexture textureWithImageNamed:@"Bomb5.gif"];
SKTexture *Bomb4 = [SKTexture textureWithImageNamed:@"Bomb4.gif"];
SKTexture *Bomb3 = [SKTexture textureWithImageNamed:@"Bomb3.gif"];
SKTexture *Bomb2 = [SKTexture textureWithImageNamed:@"Bomb2.gif"];
SKTexture *Bomb1 = [SKTexture textureWithImageNamed:@"Bomb1.gif"];
//SKTexture *explode = [SKTexture textureWithImageNamed:@"explosionnn.gif"];
countdown = [SKAction animateWithTextures:@[Bomb5,Bomb4, Bomb3, Bomb2, Bomb1] timePerFrame:1];
-(void)setBomb{
SKSpriteNode *bombb;
SKSpriteNode *explostionn;
bombb = [SKSpriteNode spriteNodeWithImageNamed:@"Bomb5.gif"];
explosionn = [SKSpriteNode spriteNodeWithImageNamed:@"explosionnn.gif"];
//set bomb in random locations on screen
NSLog(@"Placing Bomb");
int randomYAxix = [self getRandomNumberBetween:0 to:screenRect.size.height];
int randomXAxix = [self getRandomNumberBetween:0 to:screenRect.size.width];
bombb.position = CGPointMake(randomYAxix, randomXAxix);
self.explosion.position = CGPointMake(randomYAxix, randomXAxix);
bombb.size = CGSizeMake(35, 35);
explosionn.size = CGSizeMake(90, 90);
SKAction *removeNode = [SKAction removeFromParent];
//SKAction *changeHeight = [SKAction resizeToHeight:90 duration:0];
//SKAction *changeWidth = [SKAction resizeToWidth:90 duration:0];
SKAction *sequence = [SKAction sequence:@[countdown, removeNode]];
[bombb runAction: sequence];
//add code here that adds the explosion sprite once the sequence has complete
[self addChild:bombb];
}
我想要的是什么:
在动画结束后,下一个精灵(爆炸精灵)出现在炸弹所在的位置。
问题:
我没有采取行动取代精灵或帮助我正在尝试做的事情。 SKAction Class Reference 但我确实看到了这个任务customActionWithDuration:actionBlock:但不知道如何使用它,也无法通过搜索找到任何例子。
问题:
有人可以告诉我如何使用创建此任务,在5秒炸弹精灵动画结束后用我的爆炸精灵替换我的炸弹精灵吗?谢谢
答案 0 :(得分:0)
有一个SKAction将精灵的纹理设置为另一个 - 所以你甚至不必删除序列中的炸弹节点,只需替换纹理。您可以在完成块中使用它,一旦您的操作完成就会执行。
[bombb runAction:sequence completion:^{
[bombb runAction:[SKAction setTexture:explosionn.texture]];
}];
或者,如果你想把整个精灵放在那里:
explosionn.position = bomb.position;
[bombb runAction:sequence completion:^{
[self addChild:explosionn];
}];
答案 1 :(得分:0)
你可以试试这个:
[self runAction:sequence
completion:^
{
SKAction *replaceAction = [SKAction customActionWithDuration:1
actionBlock:^(SKNode *node, CGFloat elapsedTime)
{
self.explosion.position = DESIRED_POSITION;
}];
}];