2009-10-07 6 views
0

나는 내 OpenGL을 장면은 내가 터치 이벤트를 받기 시작하면OpenGLES 앱에서 '끈적'한 터치를 해결할 수있는 방법은 무엇입니까?

//This is at the end of my init method 
SEL selector = @selector(preMainLoop); 
NSThread *thread = [[NSThread alloc] initWithTarget:self selector:selector object:nil]; 
[thread start]; 
[thread release]; 
} 

-(void) preMainLoop 
{ 
while (isRunning) { 

    NSAutoreleasePool *loopPool = [NSAutoreleasePool new]; 

    [self performSelectorOnMainThread:@selector(mainLoop) withObject:nil waitUntilDone:YES]; 

    [loopPool release]; 
} 
} 

, 나는 그에 따라 내 장면을 업데이트 할 분리 스레드 방법을 사용하여 렌더링합니다. 그러나 아이폰이 터치 이벤트를 등록하는 것보다 훨씬 빨리 장면이 업데이트되는 것 같다. 테스트를 위해 UITouch의 현재 위치 (touchesMoved 동안 위치 업데이트)에 따라 화면 주위로 상자를 드래그하려고합니다. 나는 또한 독자적으로 움직이는 다른 상자를 가지고 있으며, 접촉에 영향을받지 않습니다.

indepent 상자는 초당 60 프레임으로 매끄럽게 움직입니다. 터치 상자는 '멍청한'움직임을 가지고있어 렌더링 루프가 터치 이벤트 나 그와 같은 영향을 미치고 있다고 생각하게 만듭니다.

도움을 주셨습니다.

답변

0

This forum thread에는 NSTimer와 MainLoop을 비교하고 대조하는 긴 토론이 있습니다. 특히, 당신이 다음 찾고있는 생각 : 당신이 다른 모든 것들과 같은 단일 스레드에서이 일을하고 있습니다 그러나 이후

//Yield to system calls (touches, etc.) for one ms. 
    while(CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0.002, FALSE) == kCFRunLoopRunHandledSource); 

, 나는 개인적으로 당신이 제대로 구성 NSTimer를 통해 어떤 성능 향상을 볼 수있을 것입니다 의심, 너는 심지어 때릴 수 있습니다. 마일리지는 다를 수 있지만 출시하기 전에 두 가지 방법을 테스트하고 일부 측정 항목을 수행하는 것이 좋습니다. 테스트하는 것은 쉬운 일입니다.

관련 문제