Я работаю над приложением OpenGL ES, где у меня есть космический корабль с 6 пушками. Каждое орудие использует анимацию по ключевым кадрам для интерполяции между двумя наборами вершин начальной и конечной позиции.
У меня есть метод rotateGun:
, в котором я передаю переменную gunNumber, которая указывает, какое оружие должно стрелять. Когда rotateGun:
срабатывает, он создает лазерный взрыв, который я удаляю от корабля по вектору, указывающему вниз на ствол орудия в его местоположении, когда вызывается метод. Все это прекрасно работает, но я хочу добавить случайные интервалы времени для каждого оружия, так как сейчас кажется, что они стреляют в одно и то же время.
Я пытался создать временную задержку и запустить мой метод rotateGun: с помощью performSelector:afterDelay:
, но это не работает. Затем я попытался использовать метод mainGunFire:
после задержки, а затем вызвать rotateGun:
в основном потоке… это тоже не сработало. Под «не сработало» я подразумеваю, что NSLog, который я вставил непосредственно перед моими вызовами рисования в методе rotateGun:
, действительно печатается, но пушки и взрывы никогда не рисуются.
Если я просто выполню команду executeSelectorOnMainThread для вызова rotateGun:
, то пушки и взрывы будут отрисованы, как и раньше, и кажется, что выстрелы выстрелили одновременно. Я явно чего-то не понимаю. Может кто-нибудь, пожалуйста, помогите мне понять, как немного рандомизировать мои лазерные выстрелы, чтобы они не срабатывали одновременно? Спасибо!
// Randomly Fire Gun
- (void)mainGunFire:(NSNumber *)gunNumber {
// Perform the Gun animation and fire on main thread
[self performSelectorOnMainThread:@selector(rotateGun:) withObject:gunNumber waitUntilDone:YES];
}
// Draw and Rotate the Guns
- (void)drawRotateGuns {
// Only shoot if this is not a ship life
if ( self.isLife == NO ) {
// Gun 1
// Set the pass variable to 1 and call the method
// after a variable amount of time
int randomTime = 0;
//[self performSelector:@selector(mainGunFire:) withObject:[NSNumber numberWithInt:1] afterDelay:randomTime];
[self performSelectorOnMainThread:@selector(rotateGun:) withObject:[NSNumber numberWithInt:1] waitUntilDone:YES];
// Gun 2 ...
// Gun 3 ...
}
}
[NSNumber numberWithInt:1]
- вставить случайное значение вместо 1. Вообще ваш подход неверен в дизайне, я бы рекомендовал использовать готовый опенсорсный движок ;) - person brigadir   schedule 01.02.2012