2009-10-07 68 views
0

我有使用分離線程方法我該如何修復'sticky'touches移動到我的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]; 
} 
} 

當我開始收到觸摸事件,我想相應地更新我的場景我的OpenGL場景渲染。但似乎現場的更新速度要比iPhone註冊觸摸事件的速度快得多。爲了測試,我試圖在屏幕上根據UITouch的當前位置拖動一個框(在touchesMoved期間更新位置)。我還有另一個獨立移動的盒子,不受觸摸影響。

這個獨立的盒子可以平穩地移動,每秒可以達到60幀。觸摸盒有'生澀'的動作,這使我相信渲染循環正在推動觸摸事件或者影響事件。

任何幫助表示讚賞!

回答

0

This forum thread有一個長時間的討論,比較和對比NSTimer與MainLoop。特別是,我認爲你正在尋找如下:

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

但是,因爲你是在同一個線程中一切就這樣做,我個人懷疑你會看到任何性能改進在正確配置的NSTimer,你甚至可能會受到打擊。您的里程可能會有所不同,但在啓動之前,可能需要同時測試兩種方式並執行一些指標。這是一件很容易測試的事情。

相關問題