Я пишу игру в блэкджек, используя cocos2D. Я использую CCSequence много, и во многих местах в моем коде есть проблемы с ним. Проблема, с которой я сталкиваюсь, заключается в том, что одно действие срабатывает до того, как предыдущий выполняется. , например:CCSequence не ждет действия, чтобы закончить до следующего запуска
-(void)standButtonPressed:(id)sender
{
[self removeChildByTag:333];
if ((splitNumber<3)&&(numberSplitHits>0))
{
[self removeChildByTag:333];
splitNumber++;
if ([[hands objectAtIndex:splitNumber]handTotal]==0)
goto end;
[self afterSpliting];
[self addArrow];
return;
}
end:
[self removeChildByTag:333];
[[BackgroundLayer sharedBackground]menuSetup:hand gamePhase:3];
BJDrawnCard *holeCard = [dealerHand getFlippedCard];
[holeCard flipCard];
[[SimpleAudioEngine sharedEngine] playEffect:SND_DEAL_CARD];
[self generateDealerHandDisplay];
[self updateDealerHandScoreDisplay];
id myCallFun1 = [CCCallFunc actionWithTarget:self selector:@selector(finishDrawingDealer)];
id myCallFun2 = [CCCallFunc actionWithTarget:self selector:@selector(checkWhoWonHand)];
id myCallFun3 = [CCCallFuncND actionWithTarget:[BackgroundLayer sharedBackground] selector:@selector(menuSetup:gamePhase:)data:(void*)6];
CCDelayTime *delay = [CCDelayTime actionWithDuration:2];
[self runAction:[CCSequence actions:myCallFun1,delay,myCallFun2,myCallFun3 ,nil]];
}
так myCallFunc2 бы начать работать, прежде чем заканчивается myCallFun1. У меня такая же проблема в других частях моего кода при использовании CCSequence, действия начнутся по порядку, но не дождаться завершения действия до следующего запуска.
Есть ли лучший способ для последовательности действий или, может быть, даже замена CCSequence?
здесь метод, который myCallFun1 называет:
-(void)finishDrawingDealer
{
if (dealerHand.handTotal<17)
{
drawnCard=[havila drawFromDeck];
[drawnCard setDisplayFrame:[[CCSpriteFrameCache sharedSpriteFrameCache]spriteFrameByName:drawnCard.imageFileName]];
CCMoveTo *move =[self animateDealerCards:drawnCard andPosition:[self dealerCardPosition]];
CCDelayTime *delay = [CCDelayTime
actionWithDuration:0.5];
[dealerHand getCard:drawnCard];
//Run the action
numDealerHits++;
[self performSelector:@selector(updateDealerHandScoreDisplay) withObject:nil afterDelay:1.0];
if (dealerHand.handTotal<17) {
id more = [CCCallFunc actionWithTarget:self selector:@selector(finishDrawingDealer)];
[drawnCard runAction:[CCSequence actions:delay,move,delay,more,nil]];
} else {
[drawnCard runAction:[CCSequence actions:delay,move,delay,nil]];
}
if (dealerHand.handTotal>21)
[self dealerBusted];
}
}
Вы должны просмотреть свой способ отступов кода. –
Как вы заметили, что myClassFun2 вызывается до завершения myClassFun1? Я полагаю, вы регистрируете его или используете отладчик. Также отправьте код или что бы вы ни пришли с этим заключением. –
Что делает myClassFun1? можете ли вы опубликовать реализацию? – giorashc