2013-03-16 75 views
4

我正在使用cocos2d製作BlackJack遊戲,並且存在一個問題,我似乎無法找到解決方案。我試圖做出初步處理畫面是這樣的:等到CCMoveTo完成?

  • 一卡精靈將關閉屏幕移動到玩家手中
  • 二卡精靈將關閉屏幕移動到經銷商的手
  • 三 - >玩家
  • 四 - >經銷商

要做到這一點,我調用該方法的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張牌開始移動,在幾乎相同的時間。請幫我解決這個問題:(

回答

2

你可以做到這一點在2ways 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];  
    } 
+0

非常感謝它!問題雖然:我認爲一個行動需要在下一行執行之前完成?有沒有更好的方法來達到同樣的效果? (我想多線程/ performselector:afterDelay或waitUntilDone) – 2013-03-16 05:33:42

+0

已更新我的答案...而不是執行選擇器,它更好地使用cocos2d中的CCCallBlock。 – Guru 2013-03-16 05:49:46