まず、私はホテルの部屋に座っている私のデッドアワーをコーディングしている航空会社のパイロットなので、無知を許してください。私はObjを使用してこのブラックジャックゲームを書いています。CとCocos2D。iOSの場合私の問題は次のとおりです。スタンドを押すと、コードが17に達するまでディーラーのカードを描画するようにします。なんとかそれを実行できましたが、ループに遅延を挿入するとすぐに機能しなくなります。私は次のような遅延を実装するために多くの方法を試しました:
[self performSelector:@selector(dealDealerCard:faceUp:) withObject:self afterDelay:2.0];
すべてのボタンがフリーズします。また、実行アクションを使用してCCSequenceを試しました。スケジューラーやNSTimerなども試してみました。
これが私のコードです:
// if the stand button was pressed
-(void)standButtonPressed:(id)sender
{
BJDrawnCard *holeCard = [dealerHand getFlippedCard];
[holeCard flipCard];
while ([dealerHand getTotal]<=17){
[self performSelector:@selector(dealDealerCard:faceUp:) withObject:self afterDelay:2.0];
}
そしてここに方法があります:
// Deal Dealers Card
-(void)dealDealerCard:(id) dummy faceUp:(BOOL)isFaceUp
{
drawnCard=[havila drawFromDeck];
if (isFaceUp) {
[drawnCard setDisplayFrame:[[CCSpriteFrameCache sharedSpriteFrameCache]spriteFrameByName:drawnCard.imageFileName]];
}else [drawnCard setDisplayFrame:[[CCSpriteFrameCache sharedSpriteFrameCache]spriteFrameByName:@"Backside.png"]];
[dealerHand getCard:drawnCard];
[drawnCard setScale:0.5f];
[drawnCard setPosition:[self shoePosition]];
[cardsheet addChild:drawnCard];
// animate the cards
float cardVelocity = (sqrtf((size.width*size.width)+(size.height*size.height)))/0.5; // set the base speed for the movment
// calculate the time needed to move the card
CGPoint moveDifference = ccpSub([self dealerCardPosition],
[self shoePosition]);
float moveDuration = ccpLength(moveDifference) /
cardVelocity;
// define the movement
CCMoveTo *move = [CCMoveTo actionWithDuration:
moveDuration position:[self dealerCardPosition]];
CCDelayTime *delay = [CCDelayTime
actionWithDuration:0.5];
//Run the action
[drawnCard runAction:[CCSequence actions:move,delay,nil]];
numDealerHits++;
}
要約すると、合計が17になるまで呼び出しの間に2.0秒の遅延でこのメソッドを呼び出す条件付きループを実行しようとしています。
どんな助けでもありがたいです。