Ускорьте NSTimer в Xcode - PullRequest
       1

Ускорьте NSTimer в Xcode

1 голос
/ 10 апреля 2011

Я работал над моим маленьким приложением под названием MetorideStorm. Это очень простая игра, где некоторые стены должны опускаться каждую секунду. Теперь игра должна быть более сложной, и стены должны будут падать быстрее. Как я могу это сделать? Могу ли я сделать поплавок и управлять этим NSTimer?

Кстати, игра для iPhone, но я не знаю, имеет ли это значение. Я очень новичок в программировании для iPhone и iPad, поэтому пока еще не знаю об этом.

Спасибо - Фредерик Витте

Ответы [ 3 ]

2 голосов
/ 10 апреля 2011

Если бы я перефразировал ваш вопрос, я бы сказал так. У меня есть набор стен, каждая стена должна иметь скорость в зависимости от сложности. В данный момент положение каждой стены необходимо обновлять в зависимости от ее скорости.

Как правило, вы не хотели бы изменять время, в которое происходит это обновление, поскольку движение может выглядеть прерывистым, подумайте, частота кадров. Если вы посмотрите книгу «Изучите разработку игр для iPhone и iPad cocos2d», то Штеффен Иттерхайм даже посоветует вам всегда предполагать постоянную частоту кадров. Аргумент заключается в том, что во время обычной игры вам действительно нужна постоянная частота кадров. В случаях, когда частота кадров может упасть (например, при входящем письме, и iPhone должен выполнить дополнительную обработку), вы не хотите, чтобы какое-либо движение прыгало слишком далеко. При этом было бы лучше, чтобы в течение этого короткого промежутка времени все двигалось медленно, а затем возобновлялось, где пользователь находился до срыва.

Таким образом, вместо изменения интервала вашего NSTimer, может быть лучше изменить пройденное расстояние. Установите переменную, которая содержит скорость стены (с). Установите таймер с нормальным значением (1/60 - хороший выбор). Затем в вашем обратном вызове из вашего таймера обновите положение стен (ы) в зависимости от скорости.

Конечно, это просто если вы запускаете свой собственный игровой движок. Если вы используете cocos2d, то вам действительно следует использовать планировщик CCDirector, так как использование собственного NSTimer вызовет проблемы, когда директор будет приостановлен / возобновлен и т. Д. И если вы не используете cocos2d, я бы порекомендовал изучить его, так как это заботится о таких вещах для вас.

1 голос
/ 10 апреля 2011

Мммм. Если вам нужно изменить скорость, сделайте следующее:

//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.

0 голосов
/ 11 апреля 2011

Если вы настаиваете на «ускорении» таймера, единственный способ, которым я нашел это, когда искал его, сводил к нулю и создавал новый, не думайте, что есть другой способ ... Единственная вещьВы можете изменить момент, когда таймер сработает, используя свойство fireDate , но это не изменит интервал между срабатываниями таймера, и я думаю, что он будет представлять только время срабатывания или срабатывания таймера.

...