【发布时间】:2012-12-12 05:27:07
【问题描述】:
我在 Objective-C 中有两个 NSTimers。其中之一是让一个物体在 iPhone 屏幕上慢慢向上移动,而另一个是一个分数计时器,它每 0.5 秒将分数加一分。将对象向上移动到屏幕上的计时器也有 0.5 秒的间隔。这些计时器在按下按钮时被调用/激活。按下按钮时,对象会在屏幕上缓慢移动 0.5 秒。 0.5 秒后,得分加一分,运行正常。
然而,问题在于,在 0.5 秒后,对象立即移回屏幕底部的原始位置。然后它再次开始向上移动 0.5 秒,并立即移回屏幕底部。计分计时器完美运行,每 0.5 秒加 1 分。
代码
-(IBAction)play:(id)sender{
gametimer1 = [NSTimer scheduledTimerWithTimeInterval:0.05f target:self selector:@selector(gameLoop) userInfo:nil repeats:YES];
scoretimer = [NSTimer scheduledTimerWithTimeInterval:0.05f target:self selector:@selector(scorechange) userInfo:nil repeats:YES];
}
-(void)scorechange{
score = score + 1;
scorelab.text = [NSString stringWithFormat:@"%i", score];
}
-(void)gameLoop{
balstarted = YES;
bal.center = CGPointMake(bal.center.x, bal.center.y - balspeed);
}
再一次,我的对象 bal 并没有按照应有的方式向上移动屏幕,而是仅向上移动了几个像素(在 0.5 秒内),然后将自身重置到之前的位置。
【问题讨论】:
-
您可以通过禁用增加分数的计时器来测试他们是否干扰。根据它如何重置到初始位置,它似乎与拥有第二个计时器无关(不过,在显示的代码中没有立即弹出)。
-
这听起来像是动画的问题,而不是使用两个计时器的问题。如果您为视图的框架设置动画但未将新的框架值设置到视图中,则视图的框架将“重置”。
-
感谢您的 cmets! Nate Chandler,我如何将新的帧值设置到视图中?
-
Kitsune,如果我停止计分计时器,那么 bal 对象会完美地在屏幕上移动,并且计时器可以正常工作。但是,当我添加计分计时器时,bal 对象无法正确向上移动屏幕。
标签: objective-c nstimer