我正在iPhone上編寫遊戲。我目前使用NSTimer來觸發我的遊戲更新/渲染。問題在於(分析後),我在更新/呈現之間似乎失去了很多時間,這似乎主要與插入NSTimer的時間間隔有關。除了使用NSTimer之外,在iPhone上創建遊戲循環的更好方法是什麼?
所以我的問題是什麼是使用NSTimer的最佳選擇?
請每個答案一個替代。
我正在iPhone上編寫遊戲。我目前使用NSTimer來觸發我的遊戲更新/渲染。問題在於(分析後),我在更新/呈現之間似乎失去了很多時間,這似乎主要與插入NSTimer的時間間隔有關。除了使用NSTimer之外,在iPhone上創建遊戲循環的更好方法是什麼?
所以我的問題是什麼是使用NSTimer的最佳選擇?
請每個答案一個替代。
我不知道有關iPhone特別,但我仍然可以幫助: 而不是在循環結束在一個固定的延時簡單地插入,使用以下命令:
你可能想要一個提醒機制,讓你知道你的時間是否太緊張(即,如果你的睡眠時間在所有補償後小於0,這意味着你是花費更多的時間來處理比幀速率允許的更多的時間)。效果將會是你的遊戲變慢。對於額外的點,如果您檢測到這種情況,您可能想要簡化渲染一段時間,直到您再次擁有足夠的剩餘容量爲止。
你可以得到線程有更好的表現,嘗試這樣的:
- (void) gameLoop
{
while (running)
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[self renderFrame];
[pool release];
}
}
- (void) startLoop
{
running = YES;
#ifdef THREADED_ANIMATION
[NSThread detachNewThreadSelector:@selector(gameLoop)
toTarget:self withObject:nil];
#else
timer = [NSTimer scheduledTimerWithTimeInterval:1.0f/60
target:self selector:@selector(renderFrame) userInfo:nil repeats:YES];
#endif
}
- (void) stopLoop
{
[timer invalidate];
running = NO;
}
在renderFrame
方法您準備的幀緩衝,並條機和在屏幕上顯示的幀緩存。 (PS上有各種類型的遊戲循環和他們的優點和缺點有很大article)
使用CADisplayLink,你可以找到如何在Xcode提供了OpenGL ES模板項目(創建這個模板開始一個項目,看看EAGLView類,這個例子是基於開放GL,但你可以使用CADisplayLink只用於其他類型的遊戲
你看過iPhone開發者的例子嗎?我認爲有一些例子(Touch Fighter或CrashLanding ,例如)這可能是照亮的 – 2008-09-18 20:18:18
我看了很多例子,並在互聯網上研究了其他選擇,所以我已經知道了一些替代方案,我真正追求的是別人認爲最好的選擇是什麼?非常笑rt項目,因此任何時候都可以節省調查時間。 – 2008-09-18 20:21:14