1

我正在开发一款纸牌游戏,并试图让纸牌一个接一个地发牌。我有一个方法可以将卡片从牌组动画到玩家,并且在 viewDidLoad 我调用了这个方法四次。问题是所有四张牌都是同时发的。如何在一段时间内停止方法?

我知道 scheduleTimerWithTimeInterval 方法会在延迟后调用另一个方法,但我正在寻找一种方法来在调用一次 deal 方法后中断当前方法,然后继续使用当前方法的其余部分。sleep() 也不起作用。我尝试将它放在对 deal 方法的调用之间,但它只是执行了所有 sleep()s,然后再次执行了所有动画。任何帮助深表感谢。谢谢!

4

2 回答 2

3

你走错了路。尝试休眠一种方法不是解决此问题的方法。您希望将任务分解为要连续执行的步骤,并且仅在前一步完成后执行每个步骤。

假设您有一个名为“cardCounter”的变量和一个名为“cardMax”的变量。然后你有一个叫做'dealCard'的方法。在viewDidAppear您将“cardCounter”初始化为零并将“cardMax”初始化为4(或者要发多少张牌。然后您调用“dealCard”方法。

(实际上,您可能需要一个被调用的方法newGame或其他东西,因为您可能想要拥有多个游戏,并且您不想将您的游戏设置与viewDidAppear事件联系起来。因此,viewDidAppear您可以调用“newGame”并在那里进行初始化。)

- (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

A hint. Create a setup method which is called from your init only once! In that setup method you can work with `performSelector" as tomi said. The Selector is "your" method that moves a card from the deck to the player.

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