1

私はカードゲームに取り組んでいて、カードを次々に配ろうとしています。カードをデッキからプレイヤーにアニメーション化するメソッドがあり、viewDidLoad でこのメソッドを 4 回呼び出します。問題は、4 枚のカードすべてが同時に配られることです。メソッドを一定期間停止するにはどうすればよいですか?

私は、scheduledTimerWithTimeInterval メソッドが遅延後に別のメソッドを呼び出すことを知っていますが、deal メソッドを 1 回呼び出した後に現在のメソッドを中断し、現在のメソッドの残りの部分を続行する方法を探しています。sleep() も機能しません。deal メソッドの呼び出しの間に挿入しようとしましたが、すべての sleep() を実行してから、すべてのアニメーションをもう一度一度に実行しました。どんな助けでも大歓迎です。ありがとう!

4

2 に答える 2

3

あなたは間違った道を進んでいます。メソッドをスリープさせようとすることは、これにアプローチする方法ではありません。タスクを連続して実行するステップに分割し、前のステップが完了した後にのみ各ステップを実行する必要があります。

「cardCounter」という変数と「cardMax」という変数があるとします。次に、「dealCard」というメソッドがあります。「viewDidAppearcardCounter」を 0 に、「cardMax」を 4 に初期化します (または、配られるカードの数に制限はありません。次に、「dealCard」メソッドを呼び出します。

(実際には、複数のゲームが必要になる可能性が高く、ゲームのセットアップをイベントnewGameに結び付けたくないため、おそらく呼び出されるメソッドまたは何かが必要になるでしょう。そのため、 「newGame」を呼び出してそこで初期化を行います。)viewDidAppearviewDidAppear

- (void)dealCard {

  cardCounter++;

  if (cardCounter > cardMax){
   // all cards are dealt
   // call some method to start game
   // or do any other set up;

  } else {

   // call some method to animate the card
   // using core animation with a completion handler?
   // using a ^block with a completion handler?

   // either way, in the completion handler call
   // 'dealCard' again
}
于 2012-07-11T08:13:38.300 に答える
0

ヒント。init から 1 回だけ呼び出されるセットアップ メソッドを作成します。そのセットアップ メソッドでは、tomi が言ったように「performSelector」を使用できます。Selector は、デッキからプレイヤーにカードを移動する「あなたの」メソッドです。

(void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay
于 2012-07-11T08:04:03.563 に答える