我如何在 cocos2d 中创建 30 分钟倒计时计时器,就像糖果迷生活一样。

Posted

技术标签:

【中文标题】我如何在 cocos2d 中创建 30 分钟倒计时计时器,就像糖果迷生活一样。【英文标题】:How can i create 30 minute count down timer in cocos2d like candy crush lives. 【发布时间】:2014-06-23 07:51:08 【问题描述】:

嗨,朋友们,我需要倒计时计时器来每 30 分钟增加一次生命。所以我创建了一个倒数计时器,但它只在那个调用上运行。在这里我需要全局运行计时器。如果在后台应用或终止任何机构帮助我。

这是我的代码

   int hours, minutes, seconds;
    NSTimer *timer;


- (void)updateCounter:(NSTimer *)theTimer 
if(secondsLeft > 0 )
    secondsLeft -- ;
//        hours = secondsLeft / 3600;
    minutes = (secondsLeft % 3600) / 60;
    seconds = (secondsLeft %3600) % 60;
//        myCounterLabel.text = [NSString stringWithFormat:@"%02d:%02d:%02d", hours,     minutes, seconds];
    [self removeChild:Liveslable];
    Liveslable=[CCLabelTTF labelWithString:[NSString stringWithFormat:@"lives left in  %02d:%02d minuts",minutes, seconds] fontName:@"ArialMT" fontSize:25];
    Liveslable.position=ccp(winSize.width/2, winSize.height/2-140);
    [self addChild:Liveslable];

else
    secondsLeft = 1800;



-(void)countdownTimer

secondsLeft = hours = minutes = seconds = 0;
if([timer isValid])

    [timer release];

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
timer = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(updateCounter:) userInfo:nil repeats:YES];
[pool release];

【问题讨论】:

看看这个问题和我的回答***.com/questions/24040226/countdown-in-cocos2d/… 我建议对任何不断更新的文本使用位图字体。例如,如果你为计时器使用真字体,它真的会降低性能,因为每次计时器改变时 Cocos2D 都会在运行时创建一个新纹理。 【参考方案1】:

在这种情况下不适合使用NSTimer。您不能在后台执行代码,这是有充分理由的(想象一下,如果用户退出进程或关闭设备)。相反,您应该考虑存储给予生命的时间戳,然后计算应该给予下一个生命的时间戳。

您可以像这样将时间保存到NSUserDefaults

float timeStamp = [[NSDate date] timeIntervalSince1970] * 1000; // Milliseconds 
[[NSUserDefaults standardUserDefaults] setFloat:timeStamp forKey:@"lastTimeStamp"];

然后像这样检索之前的时间戳:

float lastTime = [[NSUserDefaults standardUserDefaults] floatForKey:@"lastTimeStamp"];

每当用户打开应用程序时,您都应该执行计算并相应地给予生命。这可以在applicationWillEnterForeground: 中的AppDelegate.m 中完成

您可以在应用运行时使用您的NSTimer 检查下一个时间戳是否与NSDate-time 匹配。

【讨论】:

以上是关于我如何在 cocos2d 中创建 30 分钟倒计时计时器,就像糖果迷生活一样。的主要内容,如果未能解决你的问题,请参考以下文章

我如何创建一个可以倒计时到给定时间和日期的计数器?

在java中创建一个Count Up计时器以中断

如何减少在 Swift spritekit 中创建更多敌人的时间?

如何在 kivy 中创建 60 秒倒数计时器

如何在 Vue 组件内创建圆形进度

如何在javascript中创建一个准确的计时器?