嗨,朋友,我需要倒数计时器,以每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];
}
最佳答案
在这种情况下,不适合使用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
时间匹配。关于ios - 我如何像糖果迷一样在cocos2d中创建30分钟倒计时计时器。,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24360895/