如何在我的openGLES应用程序中修复“粘性”touchesMoved?

时间:2009-10-07 21:23:35

标签: iphone opengl-es

我使用分离线程方法

进行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的当前位置在屏幕上拖动一个框(在touchesMoved期间更新位置)。我还有另一个独立移动的盒子,不受触摸的影响。

独立盒以每秒60帧的速度顺畅地移动。触摸盒具有“生涩”的动作,这使我相信渲染循环正在推动触摸事件或其他影响。

任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:0)

This forum thread长期讨论比较和对比NSTimer与MainLoop。特别是,我认为您正在寻找以下内容:

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

但是,由于您在与其他所有内容相同的单个线程上执行此操作,因此我个人怀疑您是否会看到相对于正确配置的NSTimer的任何性能提升,您甚至可能会受到影响。您的里程可能会有所不同,但在启动之前可能值得测试两种方式并做一些指标。这很容易测试。