「ゲームカード」を使用して「マッチ3」タイプのゲームを作成しています。特定の時間間隔で発生するように設定されているアクションを停止する
背景情報、関連性はありません - >ゲームはScat(または31)というゲームのねじれです。目的は、同じスーツの3枚のカードのセットを、11の価値があるエース(したがって31が最高スコア)とすることです。
私はゲームをうまく動かすことができました。コンボとチェーンは、カードが取り除かれ、新しいカードが落ちた後に起こります。
私の次の目標は、最後のスワップから数秒後にスワップが起こるまで、そしてその後2秒ごとにスワップが行われるまでスワップを知ることです。私はカードを30秒間 "揺れ"にすることにしました。
私の問題は、スワップが発生し、アニメーションの除去/落下/置き換えが始まると、スワップ内の「未使用」カードが揺れ続け、大きなコンボが発生したときに特に目立ちます。 2秒!
私はこれに対処する方法が何千もあることを認識していますが、真剣に良いものを見つけられませんでした!ここに私の関連する機能は以下のとおりです。
- (void)updateWithTimeSinceLastUpdate:(CFTimeInterval)timeSinceLast
{
self.lastSwapTimeInterval += timeSinceLast;
if (self.lastSwapTimeInterval > 2)
{
self.lastSwapTimeInterval = 0;
[self showPossibleSwap];
}
}
-(void)update:(NSTimeInterval)currentTime
{
CFTimeInterval timeSinceLast = currentTime - self.lastUpdateTimeInterval;
self.lastUpdateTimeInterval = currentTime;
if (timeSinceLast > 1)
{
timeSinceLast = 1.0/60.0;
self.lastUpdateTimeInterval = currentTime;
}
[self updateWithTimeSinceLastUpdate:timeSinceLast];
}
-(void)animatePossibleSwap:(BGSSwap *)swap
{
BGSCard *first = swap.cardA;
BGSCard *second = swap.cardB;
const NSTimeInterval timeDiff = 0.05;
SKAction *rot15r = [SKAction rotateByAngle:-[self degreesToRadian:15] duration:0.05];
SKAction *rot30 = [SKAction rotateByAngle:[self degreesToRadian:30] duration:0.1];
SKAction *rot30r = [SKAction rotateByAngle:-[self degreesToRadian:30] duration:0.1];
[first.sprite runAction:[SKAction sequence:@[rot15r,rot30,rot30r,rot30,rot15r]]];
[second.sprite runAction:[SKAction sequence:@[[SKAction waitForDuration:timeDiff],rot15r,rot30,rot30r,rot30,rot15r]]];
}
-(void)showPossibleSwap
{
BGSSwap *swap = [self.level.possibleSwaps anyObject];
[self animatePossibleSwap:swap];
NSLog(@"Show Possible Swap NOW: %f",_lastSwapTimeInterval);
}
スティーブさん、このメソッドを見つけましたが、実装するのに適したコードを探していました...補完ブロックにある可能性が最も高いですか? – Sam
スワップをするときには、シェイクアニメーションを止めたいと思うことがあります。たぶん、あなたのコードの詳細から一歩踏み出し、あなたが達成しようとしているものについて考える必要があるでしょう。 –