gpt4 book ai didi

iphone - 线程中的 CADisplayLink

转载 作者:搜寻专家 更新时间:2023-10-30 20:00:40 25 4
gpt4 key购买 nike

我正在制作游戏,我想在不同的线程上运行游戏逻辑代码和渲染代码,以期提高性能。但对于我来说,我无法弄清楚如何在生成的线程中运行 CADisplayLink。现在我正在使用 NSThread 进行多线程处理。我读过有关 NSOperationQue 的内容,但我并不是很了解它。有人能指出我正确的方向吗?这是我现在使用的代码,-logicLoop-animationLoop 都在单独的线程上运行,所以我认为它们会得到单独的运行循环和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 吗?如果是这样,我将如何去做?我真正需要的是一种在单独的线程上运行游戏循环和动画循环的有效方法,这样它们就不会互相减慢速度,并且游戏会显得更加流畅。

谢谢!

最佳答案

要运行显示链接,您需要运行循环。 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];
}

关于iphone - 线程中的 CADisplayLink,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12015833/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com