我正在尝试使用NSTimer开发游戏并遇到一个小问题,一旦精灵出现,它在我的场景中有一定的时间在淡出之前。
double CALC_TIME = 5;
[NSTimer scheduledTimerWithTimeInterval:CALC_TIME target:self selector:@selector(hideSprite) userInfo:nil repeats:NO];
我想在5秒后调用hideSprite,而是立即调用(或接近即时)。
可能的解决方案: 我知道我可以通过设置重复计时器来做到这一点,并且首先设置bool firstCall然后在下一个时间间隔内完成淡入淡出,计时器无效但我认为这不是好习惯
像这样:
bool firstCall = false;
-(void)hideSprite{
if(!firstCall){
firstCall = true
}else{
//fade out sprite
//Invalidate NSTimer
//firstCall = false;
}
}
感谢您的帮助!
答案 0 :(得分:2)
我怀疑其他人正在调用hideSprite
。您编写的代码将导致计时器在调用选择器hideSprite
之前等待五秒钟。
为计时器提供一个不同的选择器(编写一个只执行NSLog
的新测试方法),看看会发生什么。这将告诉你a)计时器是否确实立即开火,b)如果其他人正在调用hideSprite
。
[NSTimer scheduledTimerWithTimeInterval:CALC_TIME target:self selector:@selector(testTimer) userInfo:nil repeats:NO];
-(void) testTimer { NSLog(@"Timer - and only the timer - called me."); }
-(void) hideSprite {
NSLog(@"I definitely wasn't called by the timer.");
}
答案 1 :(得分:1)
通常使用像
这样的东西更容易[UIView animateWithDuration: 0 delay: 5 options:0 animations: nil completion:
^{
// fade sprite
}];
(不确定animations
是否可以为零,但你明白了。)
答案 2 :(得分:0)
考虑使用initWithFireDate:interval:target:selector:userInfo:repeats
方法初始化您的计时器。以下是NSTimer的详细介绍。