Ash*_*vis 23 iphone cocoa objective-c
我在iPhone上编写游戏.我目前正在使用NSTimer来触发我的游戏更新/渲染.这个问题是(在分析之后)我似乎在更新/渲染之间失去了很多时间,这似乎主要与我插入NSTimer的时间间隔有关.
所以我的问题是使用NSTimer的最佳替代方案是什么?
请回答一个替代方案.
zou*_*oul 18
你可以通过线程获得更好的性能,尝试这样的事情:
- (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;
}
Run Code Online (Sandbox Code Playgroud)
在renderFrame方法中准备帧缓冲区,绘制帧并在屏幕上显示帧缓冲区.(PS 关于各种类型的游戏循环及其优缺点,有一篇很棒的文章.)
我对 iPhone 不太了解,但我仍然可以提供帮助:不要简单地在循环末尾插入固定延迟,而是使用以下命令:
您可能希望有一个警报机制,让您知道您的时间安排是否太紧(即,如果您在所有补偿后的睡眠时间小于 0,这意味着您需要花费更多的时间来处理您的帧速率允许)。效果将是你的游戏速度变慢。为了获得额外的分数,如果您检测到这种情况发生,您可能需要暂时简化渲染,直到您再次拥有足够的备用容量。
| 归档时间: |
|
| 查看次数: |
14468 次 |
| 最近记录: |