Как я могу исправить «липкие» прикосновения, сделанные в моем приложении openGLES? - PullRequest
0 голосов
/ 08 октября 2009

У меня рендеринг сцены openGL с использованием метода отсоединения потока

//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];
 }
}

Когда я начинаю получать сенсорные события, я хочу соответствующим образом обновить свою сцену. Но кажется, что сцена обновляется намного быстрее, чем iPhone регистрирует сенсорные события. Для тестирования я пытаюсь просто перетащить рамку вокруг экрана, основываясь на текущей позиции UITouch (обновляя позицию во время касания). У меня также есть еще одна коробка, которая движется независимо друг от друга, не зависит от прикосновений.

Независимая коробка движется плавно, со скоростью 60 кадров в секунду. Сенсорный блок имеет «резкое» движение, которое заставляет меня поверить, что цикл рендеринга выталкивает события касания или что-то подобное.

Любая помощь приветствуется!

1 Ответ

0 голосов
/ 08 октября 2009

В этой ветке форума долго обсуждается сравнение и сравнение NSTimer с MainLoop. В частности, я думаю, что вы ищете следующее:

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

Однако, поскольку вы делаете это в одном и том же потоке, как и все остальное, я лично сомневаюсь, что вы увидите какое-либо улучшение производительности по сравнению с правильно настроенным NSTimer, и вы можете даже получить удар. Ваш пробег может отличаться, но перед запуском, возможно, стоит протестировать оба способа и выполнить некоторые метрики. Это достаточно легко проверить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...