等到CCMoveTo完成?

时间:2013-03-16 04:48:59

标签: iphone ios objective-c cocos2d-iphone

我正在使用cocos2d进行BlackJack游戏,并且有一个问题,我似乎无法找到解决方案。我正在尝试像这样制作初始交易屏幕:

  • 第一张卡片精灵将从屏幕外移动到玩家手中
  • 第二张卡精灵将从屏幕外移动到经销商手中
  • 第三 - >播放器
  • 第四 - >经销商

为此,我从播放器和经销商类中调用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];
......
}

我希望第一张卡在第二张卡开始移动之前完成移动到指定位置,但实际上所有4张卡几乎同时开始移动。请帮我解决这个问题:(

1 个答案:

答案 0 :(得分:2)

您可以在2路进行1.使用CCDelayTime 2.使用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];    
    }