我使用分离线程方法
进行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帧的速度顺畅地移动。触摸盒具有“生涩”的动作,这使我相信渲染循环正在推动触摸事件或其他影响。
任何帮助表示赞赏!
答案 0 :(得分:0)
This forum thread长期讨论比较和对比NSTimer与MainLoop。特别是,我认为您正在寻找以下内容:
//Yield to system calls (touches, etc.) for one ms.
while( CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0.002, FALSE) == kCFRunLoopRunHandledSource);
但是,由于您在与其他所有内容相同的单个线程上执行此操作,因此我个人怀疑您是否会看到相对于正确配置的NSTimer的任何性能提升,您甚至可能会受到影响。您的里程可能会有所不同,但在启动之前可能值得测试两种方式并做一些指标。这很容易测试。