2011-12-22 52 views
2

Fistly我相当新的编程一般。 Objective C和IOS编程非常新颖。这只是我正在写作的一门练习编程。NSTimer或暂停操作?

什么它基本上做到这一点是:

计算机选择多次攻击,然后随机据法权产,以1至4或0和3(真的无所谓)的数字。每次它通过for循环时都会执行此操作。

什么,我试图完成的是:

如果计算机选取0,则凸显了相应的按钮并使其活跃用户与互动,但他们只是有一定的时间来按下所述按钮。定时器调用一个不按下按钮并使其处于非活动状态的功能。

所有这些工作,但它都发生在同一时间。如果计算机攻击三次,则所有三个按钮都会同时突出显示并激活,然后同时处于不活动状态。我想让程序暂停一段时间,让玩家有足够的时间按下按钮。我无法弄清楚这一部分。我想使用一个while循环,当一个按钮被按下时,或者当定时器调用这个函数时,这个循环只会让它停留在while循环中。我已经在第一个陈述中表明了这一点。

再次请保持简单,因为我对编程新手。由于

if(theEnemy.attackingOrBlocking == 1) 
{ 
    int whereAttack; 
    int numberOfAttacks = 3; //theEnemy.numOfAttacks; 
    for (int i = 0; i <= numberOfAttacks; i++) 
    { 
     whereAttack = theEnemy.attackButton; 
     if (whereAttack == 0) 
     { 
      while (buttonPushed == NO) 
      { 
       [NSTimer scheduledTimerWithTimeInterval:0.5f target:self selector:@selector(timerCallback) userInfo:nil repeats:NO]; 

       lowAttackBlock.userInteractionEnabled = YES; 
       lowAttackBlock.highlighted = YES; 
      } 

     } 
     if (whereAttack == 1) 
     { 
       [NSTimer scheduledTimerWithTimeInterval:0.5f target:self selector:@selector(timerCallback) userInfo:nil repeats:NO]; 

       leftAttackBlock.userInteractionEnabled = YES; 
       leftAttackBlock.highlighted = YES; 

     } 
     if (whereAttack == 2) 
     { 
       [NSTimer scheduledTimerWithTimeInterval:0.5f target:self selector:@selector(timerCallback) userInfo:nil repeats:NO]; 

       rightAttackBlock.userInteractionEnabled = YES; 
       rightAttackBlock.highlighted = YES; 

     } 
     if (whereAttack == 3) 
     { 
       [NSTimer scheduledTimerWithTimeInterval:0.5f target:self selector:@selector(timerCallback) userInfo:nil repeats:NO]; 

       highAttackBlock.userInteractionEnabled = YES; 
       highAttackBlock.highlighted = YES; 
     } 
     if (myCharacter.block != whereAttack) 
     { 
      myCharacter.health -= 10; 
      [yourHealth setText:[[NSString alloc] initWithFormat:@"%d",myCharacter.health]]; 
     } 
    } 

} 

}

+3

+1学习编程。 – 2011-12-22 15:43:30

回答

0

启动一个定时器是Asynchrone操作,所以它不会停止应用程序的正常流动,所以如果你是在一个for循环,推出3定时器,for循环将在第一个计时器回电之前完全执行。

这样做的一个方法是缓存实例变量中的命中数,每调用一次定时器,就会减少一次。

因此,您启动一​​系列3次攻击,将remainingAttack实例变量设置为3,调用方法performAttack,检查是否存在攻击,如果执行了攻击(或者您想执行它从定时器回叫),将攻击次数减少1(或从定时器回拨),启动定时器。
在定时器callBack做你的逻辑,然后再次调用你的performAttack作为你的定时器的最后一个动作。
这将是我现在可以考虑的基本逻辑,您将不得不根据您的个人需求进行调整,并且可能有更好的解决方案。但那是一个。