我正在做一个游戏,我想在不同的线程上运行游戏逻辑代码和渲染代码,希望能提高性能。但就我而言,我不知道如何在派生的线程中运行CADisplayLink。现在,我正在使用NSThread进行多线程。我读过关于NSOperationQue的文章,但我对它并不是很了解。有人能给我指个方向吗?这是我现在使用的代码,-logicLoop和-animationLoop都是在不同的线程上运行的,所以我认为它们会得到不同的run循环,并且CADisplayLinks会在不同的线程上。
-(void)logicLoop {
NSLog(@"adding");
logicTimer = [CADisplayLink displayLinkWithTarget:self selector:@selector(updateModel)];
logicTimer.frameInterval = kFrameInterval;
[logicTimer addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
}
-(void)animationLoop {
NSLog(@"animation");
animationTimer = [CADisplayLink displayLinkWithTarget:self selector:@selector(renderScene)];
animationTimer.frameInterval = kFrameInterval;
[animationTimer addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
}有什么想法吗?
我应该为此使用NSOperationQue吗?如果是这样,我该怎么做呢?我真正需要的是一种高效的方式,在不同的线程上运行游戏循环和动画循环,这样它们就不会彼此减慢,游戏看起来会流畅得多。
谢谢!
发布于 2012-08-18 13:54:41
要运行显示链接,您需要运行一个run循环。NSThread所做的就是生成一个线程,调用选择器,并在选择器完成后退出。下面是这个选择器应该做的事情:
- (void)threadSelector
{
// initialize CADisplayLink
logicTimer = [CADisplayLink displayLinkWithTarget:self selector:@selector(updateModel)];
logicTimer.frameInterval = kFrameInterval;
[logicTimer addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
// run the loop - this never returns
[[NSRunLoop currentRunLoop] run];
}https://stackoverflow.com/questions/12015833
复制相似问题