Я работаю над приложением OpenGL ES, где у меня есть космический корабль с 6 пушками. Каждое оружие использует анимацию ключевого кадра для интерполяции между двумя наборами вершин начальной и конечной позиции.OpenGL ES Выполнить селектор после случайной задержки
У меня есть способ rotateGun:
, что я передаю переменную gunNumber, относящуюся к тому, что касается огня, который должен стрелять. Когда rotateGun:
срабатывает, он создает лазерный взрыв, который я удаляю от корабля через вектор, указывающий вниз по стволу орудия в его месте при вызове метода. Все это прекрасно работает, но я хочу добавить случайные интервалы времени для каждого пушки, чтобы стрелять, так как сейчас они, похоже, срабатывают одновременно.
Я попытался создать временную задержку и запустить мой rotateGun: метод с использованием performSelector:afterDelay:
, но это не сработает. Затем я попытался использовать метод mainGunFire:
после задержки, а затем позвонил rotateGun:
по основному потоку ... это тоже не сработало. Под «не работает» я имею в виду, что NSLog I, вставленный непосредственно перед тем, как мои призывы рисования в методе rotateGun:
действительно печатает, но оружие и взрывы никогда не рисуются.
Если я просто выполняю функциюSelectorOnMainThread для вызова 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. В целом ваш подход неправилен в дизайне, я бы рекомендовал использовать готовый с открытым исходным кодом двигатель;) – brigadir
ОК спасибо за вход! – PhilBot