2014-02-19 2 views
0

Что я делаю:Как заменить SpriteNode с другим

У меня есть бомбы создаются каждые несколько секунд через повторяющийся таймер, непрерывно вызывая следующий метод.

//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

Существует SKAction, который устанавливает текстуру спрайта в другую, поэтому вам даже не нужно удалять узел бомбы в вашей последовательности, просто замените текстуру. Вы можете использовать это в блоке завершения, который будет выполнен после завершения действия.

[bombb runAction:sequence completion:^{ 
    [bombb runAction:[SKAction setTexture:explosionn.texture]]; 
}]; 

Или, если вы хотите, чтобы весь спрайт поставить там:

explosionn.position = bomb.position; 
[bombb runAction:sequence completion:^{ 
    [self addChild:explosionn]; 
}]; 
+0

Спасибо так много! Это было именно то, что мне нужно. Фантастический ответ! – 4GetFullOf

0

Вы можете попробовать это:

[self runAction:sequence 
    completion:^ 
{ 

    SKAction *replaceAction = [SKAction customActionWithDuration:1 
                actionBlock:^(SKNode *node, CGFloat elapsedTime) 
    { 
     self.explosion.position = DESIRED_POSITION; 
    }]; 
}];