我正在使用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张卡几乎同时开始移动。请帮我解决这个问题:(
答案 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];
}