0

私がしていること:

次のメソッドを継続的に呼び出して、繰り返しタイマーを使用して数秒ごとに爆弾を設定しています。

//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: を見ていますが、それを使用する方法がわからず、検索で例を見つけることもできません。

質問:

create this task を使用して、5 秒間の爆弾スプライト アニメーションが終了した後に爆弾スプライトを爆発スプライトに置き換える方法を教えてもらえますか? ありがとうございました

4

2 に答える 2

0

スプライトのテクスチャを別のテクスチャに設定する SKAction があります。そのため、シーケンス内の爆弾ノードを削除する必要さえなく、テクスチャを置き換えるだけです。アクションが終了すると実行される完了ブロックでそれを使用できます。

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

または、スプライト全体をそこに入れたい場合:

explosionn.position = bomb.position;
[bombb runAction:sequence completion:^{
    [self addChild:explosionn];
}];
于 2014-02-19T21:43:35.753 に答える
0

これを試すことができます:

[self runAction:sequence
     completion:^
{

    SKAction *replaceAction = [SKAction customActionWithDuration:1
                                                     actionBlock:^(SKNode *node, CGFloat elapsedTime) 
    {
        self.explosion.position = DESIRED_POSITION;
    }];
}];
于 2014-02-19T21:48:19.430 に答える