【问题标题】:NSTimer is not firingNSTimer 没有触发
【发布时间】:2013-06-23 10:27:43
【问题描述】:

我的一切工作正常,计时器也在运行。但是当我遇到奇怪的问题时,我不得不重组我的 cocos2d 场景。 现在我不能再触发 NSTimer,下面的 BonusTimer 甚至没有触发一次。

先谢谢了,下面是代码。

BonusTimeTimer = [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(CountTimeBonus:) userInfo:nil repeats:YES];
// (lately i added the line below, but it does not help)
[[NSRunLoop mainRunLoop] addTimer:BonusTimeTimer forMode:NSDefaultRunLoopMode];


-(void)CountTimeBonus:(NSTimer *) sender {
    NSLog (@"Method -> Countimebonus");
    if ( (scoreTotal + 37) < TargetScore){
        scoreTotal = scoreTotal + 37;
        TimeBonus = TimeBonus-37;
        NSString *level_timebonus = [NSString stringWithFormat:@"%d", TimeBonus];
        [labelTimeBonus setString: level_timebonus];
        NSString *scorestr = [NSString stringWithFormat:@"%d", scoreTotal];
        [labelMainScore setString: scorestr];
        [[SimpleAudioEngine sharedEngine] playEffect:@"light_switch_.mp3"];
    }
    else {
        // add the Last few points and finish BonusTimer
        scoreTotal = scoreTotal + TimeBonus;
        TimeBonus=0;
        NSString *level_timebonus = [NSString stringWithFormat:@"%d", timebonusgrayed];
        [labelTimeBonus setString: @"" ];
        [labelTimeBonusGrayed setString: level_timebonus];
        NSString *scorestr = [NSString stringWithFormat:@"%d", scoreTotal];
        [labelMainScore setString: scorestr];
        [[SimpleAudioEngine sharedEngine] playEffect:@"light_switch_.mp3"] ;
        [BonusTimeTimer invalidate];
        BonusTimeTimer = nil;
        timeBonusisdone = true;
        timeBonusisactive = false;
    }

}

【问题讨论】:

    标签: cocos2d-iphone xcode4.5 nstimer


    【解决方案1】:

    我从来没有真正深入研究过那个兔子洞(即为什么会这样),但是这里一直有传言说 NSTimer 和 cocos2d 不能很好地混合。而是使用cocos自己的方法

    [self schedule:@selector(CountTimeBonus:) interval:.01];
    
    // and to invalidate this
    
    
    [self unschedule:@selector(CountTimeBonus:)];
    

    CountTimeBonus 签名将是:

    -(void) CountTimeBonus:(ccTime) dt {
    }
    

    【讨论】:

    • Cocos2d 的计时器在游戏暂停时也可以正常工作(例如,它们会暂停射击)。使用 cocos2d 的定时器是个好建议。
    • 感谢工作,对我来说。这里还有一些需要考虑的事情,1) 代码:[self schedule:@selector(CountTimeBonus:) delay:.01];有语法问题,请改用它(如下):[self schedule:@selector(CountTimeBonus:) interval:.01]; 2)
    • thks,我更新了答案,这样其他人就不必弄清楚了:)
    【解决方案2】:

    感谢为我工作的 YvesLeBorg。

    还有一些事情需要考虑,

    1) cocos2d 代码:

    [self schedule:@selector(myTimer:) delay:.01];
    

    语法有问题,我用这个代替(下):

    [self schedule:@selector(myTimer:) interval:.01];
    

    2) 我让 NSTimer 再次工作,但是当我将 NSTimer 调用置于 do-while 循环中时,它就无法工作了。

    再次感谢,祝你好运

    约翰

    【讨论】:

      猜你喜欢
      • 2012-07-15
      • 2023-03-11
      • 1970-01-01
      • 2014-09-16
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多