Objective-c -> дизайн iphone: замедленное действие - PullRequest
2 голосов
/ 23 сентября 2010

Извините, что беспокою, но я немного рассол, и мне было интересно, может ли кто-нибудь здесь помочь мне.

В настоящее время я разрабатываю игру, в которой враги появляются в левой части экрана (за пределами границ) и движутся вправо.Я использовал несколько кодов (это использует Sparrow Framework), и количество врагов увеличивается, когда вы их побеждаете.т. е. lvl 1-> 1 враг, lvl 2-> 2 врага, lvl3-> 3 врага и т. д.У меня они появляются на 1 из 5 заданных путей (номеров путей в NSMutableArray), выбранных генератором случайных чисел, однако они часто появляются на одном и том же пути, 1 поверх другого.

Для создания враговЯ запускаю несколько методов: addEnemy -> производит врагов (анимации), которые затем перемещаются слева направо.onTouchEnemy -> если я коснусь врага, они умрут.активирует drawEnemies drawEnemies -> вызывает addEnemy количество раз, равное вашему lvl.закодированный как:

for(int i = 0; i < level; i++){
  [self performSelector:@selector(addEnemy) withObject:nil afterDelay:3.0];
}

Есть ли способ запрограммировать так, чтобы между активацией метода создания врагов была задержка?Я попробовал это после задержки, но по какой-то причине программа просто игнорирует 3-секундную задержку и просто производит врагов всего за 1 ход.Это довольно раздражает, так как я хотел бы, чтобы они появились более упорядоченно.

Я благодарю всех, кто хочет помочь мне с этим.Sjkato.

Ответы [ 3 ]

2 голосов
/ 23 сентября 2010

Вы хотели сделать это с дополнительным «* i» в конце?Как это:

for(int i = 0; i < level; i++){
    [self performSelector:@selector(addEnemy) withObject:nil afterDelay:3.0 * i];
}
2 голосов
/ 23 сентября 2010

performSelector:withObject:afterDelay:, кажется, игнорирует свою задержку из-за способа выполнения кода.Цикл for будет повторяться почти мгновенно, поставив в очередь 3 вызова метода addEnemy.Через 3 секунды выполняются методы addEnemy, почти все одновременно.

Чтобы получить лучший результат, вы должны взглянуть на NSTimer.Вы можете установить интервал в 3 секунды и попросить его повторить (вы можете сделать таймер недействительным после того, как будет произведено нужное количество врагов).

Что-то вроде:

// creates and returns a new timer
// the timer is retained by the run loop for as long as it is valid
// invalidating the timer will cause the runloop to release it.
myTimer = [NSTimer scheduledTimerWithTimeInterval:3.0
                                 target:self
                               selector:@selector(addEnemy)
                               userInfo:nil
                                repeats:YES];

Это будетвызывать метод addEnemy каждые 3 секунды.Вы должны следить за тем, сколько врагов у вас уже есть, и после создания последнего остановите таймер, чтобы он не сработал снова.

if (numberOfDesiredEnemies == numberOfEnemiesProduced)
{
    [myTimer invalidate], timer = nil;
}
0 голосов
/ 23 сентября 2010

Попробуйте просмотреть класс NSTimer.
Есть несколько методов, которые предоставляют возможность выполнять селекторы с предопределенными условиями задержки и цикла.

...