我正在尝试创建一个简单的倒数计时器,以便当玩家进入我的游戏时,计时器从60开始下降到0.看起来很简单,但我对如何写这个感到困惑。
到目前为止,我在GameController.m中创建了一个方法,如下所示:
-(int)countDownTimer:(NSTimer *)timer {
[NSTimer scheduledTimerWithTimeInterval:-1
invocation:NULL
repeats:YES];
reduceCountdown = -1;
int countdown = [[timer userInfo] reduceCountdown];
if (countdown <= 0) {
[timer invalidate];
}
return time;
}
在游戏开始时,我将整数Time初始化为60.然后在ViewController中设置标签。但是当我编译代码时,它只是将标签显示为60并且根本不会减少。
非常感谢任何帮助 - 我是Objective-C的新手。
修改
在我的帮助下,我现在将代码分成两个单独的方法。代码现在看起来像这样:
-(void)countDown:(NSTimer *)timer {
if (--time == 0) {
[timer invalidate];
NSLog(@"It's working!!!");
}
}
-(void)countDownTimer:(NSTimer *)timer {
NSLog(@"Hello");
[NSTimer scheduledTimerWithTimeInterval:1
target:self
selector:@selector(countDown:)
userInfo:nil
repeats:YES];
}
HOWEVER ,代码仍未正常运行,当我从View Controller调用方法[game countDownTimer]时,它会断言:“无法识别的选择器发送到实例”。任何人都可以解释这里有什么问题吗?
答案 0 :(得分:11)
您的代码存在一些问题:
NULL
你应该调用带选择器的重载,并在间隔时间内传递1
,而不是-1
。
声明NSTimer *timer
和int remainingCounts
,然后添加
timer = [NSTimer scheduledTimerWithTimeInterval:1
target:self
selector:@selector(countDown)
userInfo:nil
repeats:YES];
remainingCounts = 60;
到您想要开始倒计时的地方。然后添加countDown方法本身:
-(void)countDown {
if (--remainingCounts == 0) {
[timer invalidate];
}
}
答案 1 :(得分:1)
试试这个
- (void)startCountdown
{
_counter = 60;
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1
target:self
selector:@selector(countdownTimer:)
userInfo:nil
repeats:YES];
}
- (void)countdownTimer:(NSTimer *)timer
{
_counter--;
if (_counter <= 0) {
[timer invalidate];
// Here the counter is 0 and you can take call another method to take action
[self handleCountdownFinished];
}
}
答案 2 :(得分:0)
从您提出的问题开始。您可以通过每1秒调用一次函数来实现这一点,并处理该减量逻辑。
段: -
NSTimer *t = [NSTimer scheduledTimerWithTimeInterval: 1.0
target: self
selector:@selector(onTick:)
userInfo: nil repeats:YES];
(void)onTick
{
//do what ever you want
NSLog(@"i am called for every 1 sec");
//invalidate after 60 sec [timer invalidate];
}