Я работаю над приложением OpenGL ES, где у меня есть космический корабль с 6 пушками.Каждый пистолет использует анимацию ключевого кадра для интерполяции между 2 наборами вершин начальной и конечной позиции.
У меня есть метод 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 ...
}
}