4

cocos2d を使用して BlackJack ゲームを作成していますが、解決策が見つからないように見える問題があります。私はこのような最初の取引画面を作ろうとしています:

  • 最初のカード スプライトが画面外からプレイヤーの手札に移動する
  • 2 番目のカード スプライトが画面外からディーラーの手札に移動します。
  • サード -> プレーヤー
  • 4番目 -> ディーラー

これを行うには、Player クラスと Dealer クラスの両方からメソッド drawCard を呼び出します。

[self.player drawCard];
[self.dealer drawCard];
[self.player drawCard];
[self.dealer drawCard];

drawCard メソッドでは:

-(void) drawCard {
.......
id move = [CCMoveTo actionWithDuration:0.4 position:ccp(x, y)];
        [card.sprite runAction:move];
......
}

2枚目のカードが動き始める前に1枚目のカードが所定の位置に移動し終わってほしいのですが、実際には4枚のカードがほぼ同時に動き出します。この問題の解決を手伝ってください:(

4

1 に答える 1

2

CCDelayTime1.使う2.使うの2wayでできます。CCCallBlock

1.使用CCdelayTime

   [self.player drawCard:0]; 
   [self.dealer drawCard:0.5f]; 
   [self.player drawCard:1.0f]; 
   [self.dealer drawCard:1.5f];

    -(void) drawCard:(float)delay
    {
       if(!delay)
       {
          id move = [CCMoveTo actionWithDuration:0.4 position:ccp(x, y)];
          [card.sprite runAction:move];
       }
       else
       {
          id delay    = [CCDelayTime actionWithDuration:delay];
          id move     = [CCMoveTo actionWithDuration:0.4 position:ccp(x, y)];
          id sequence = [CCSequence actions:delay, move, nil];
          [card.sprite runAction:sequence];
       }

    }

2.使用CCCallBlock

    -(void) drawCard:(id)inCard
    {
        mCardIndex++; //in init mCardIndex=0

        id move    = [CCMoveTo actionWithDuration:0.4 position:ccp(x, y)];
        id calBlk  = [CCCallBlock actionWithBlock:^{

                            if(mCardIndex <= TOTAL_CARD)
                            {
                                //here get rightCard
                                [self drawCard:newCard];
                            }
                    }];
        id sequence = [CCSequence actions: move, calBlk,  nil];

        [inCard.sprite runAction:sequence];    
    }
于 2013-03-16T05:07:34.243 に答える