在Xcode中加速NSTimer

时间:2011-04-10 19:14:56

标签: iphone objective-c cocoa nstimer

我正在开发名为MetorideStorm的小应用程序。这是一个非常简单的游戏,每一秒都需要向下移动一些墙。现在游戏需要更加困难,墙壁需要更快地摔倒。我怎样才能做到这一点?我可以制作一个浮点数,并用它来控制NSTimer吗?

到了那时,这款游戏适用于iPhone,但我不知道是否重要。我对iPhone和iPad编程很陌生,所以我对此还不太了解。

谢谢 - 弗雷德里克威特

3 个答案:

答案 0 :(得分:2)

如果我要重述你的问题,我会这样说。我有一组墙,每个墙需要有一个基于难度的速度。在给定时间,每个墙的位置需要根据其速度进行更新。

一般情况下,您不希望改变此更新发生的时间,因为移动可能看起来不稳定,请考虑帧速率。如果你看一下“学习iPhone和iPad cocos2d游戏开发”这本书,Steffen Itterheim甚至建议总是假设一个恒定的帧速率。争论的焦点是,在正常的游戏过程中,你真的想要一个恒定的帧速率。在帧率可能下降的情况下(例如,有传入的电子邮件而iPhone必须进行额外处理),您不希望任何移动跳得太远。话虽这么说,但是在这么短的时间内,事情会缓慢移动,然后在用户处于中断之前恢复。

因此,改变移动的距离可能会更好,而不是更改NSTimer的间隔。设置一个保持墙壁速度的变量。设置一个理智的计时器(1/60是一个不错的选择)。然后在你的定时器回调中根据速度更新墙壁的位置。

当然,这就是你正在推动自己的游戏引擎。如果您正在使用cocos2d,那么您应该真正使用CCDirector的调度程序,因为使用您自己的NSTimer会在导演暂停/恢复等时导致问题...如果您不使用cocos2d,我建议您查看它,如它会为你处理这类事情。

答案 1 :(得分:1)

嗯。如果你需要改变速度,请执行以下操作:

//This is the way you make a timer. Where @selector(meth:) is the method you want to
//call and interval is the amount of time for each call. Decrease x to speed up the
//timer.
[self schedule: @selector(yourMethod:) interval:x];

//This is the method your timer will call.
-(void) yourMethod: (ccTime) dt
{
    //Do stuff in here
}

这是Cocos2d的方式,因为你说你使用的是Cocos2d。

答案 2 :(得分:0)

如果你坚持“加速”一个计时器,当我查找它时,我发现这样做的唯一方法是无效并创建一个新的,不要以为还有另一种方式......唯一的办法你可以改变计时器将使用fireDate属性触发的时刻,但这将更改计时器触发之间的间隔,我认为它只代表第一个< / em>计时器开火或将开火的时间。