6 개의 총을 가진 우주선이있는 OpenGL ES 응용 프로그램에서 작업하고 있습니다. 각 건은 키 프레임 애니메이션을 사용하여 시작점과 끝점의 정점 2 세트 사이를 보간합니다.OpenGL ES 무작위 지연 후 셀렉터 수행
나는 총을 발사해야하는 gunNumber 변수를 전달하는 rotateGun:
메서드가 있습니다. rotateGun:
이 발사 될 때, 나는 레이저 발파공을 생성합니다.이 폭발은 내가 그 배의 위치에서 총구를 가리키는 벡터를 통해 배에서 멀어 질 때까지 호출됩니다. 이 모든 것은 잘 작동하지만 지금은 동시에 발사되는 것처럼 보이기 때문에 각 총에 대해 임의의 시간 간격을 추가하고 싶습니다.
performSelector:afterDelay:
을 사용하여 시간 지연을 생성하고 rotateGun : 메서드를 실행하려고 시도했지만 작동하지 않습니다. 그런 다음 지연 후 메서드 mainGunFire:
을 사용하려고 시도한 다음 주 스레드에서 rotateGun:
을 호출합니다 ... 이것은 또한 작동하지 않았습니다. "작동하지 않음"이란 의미는 rotateGun:
메서드 내에서 드로잉 호출이 인쇄되기 바로 전에 NSLog를 삽입했지만 총과 폭발은 발생하지 않습니다.
단순히 performSelectorOnMainThread를 호출하여 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