Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 使用opengl绘制小于每帧的图形_Objective C_Ios_Cocos2d Iphone - Fatal编程技术网

Objective c 使用opengl绘制小于每帧的图形

Objective c 使用opengl绘制小于每帧的图形,objective-c,ios,cocos2d-iphone,Objective C,Ios,Cocos2d Iphone,在cocos2d中,通过opengl绘制cclayer的频率是否比每一帧都低?我试过: -(void) draw { glEnable(GL_LINE_SMOOTH); if (iShouldUpdate) { ccDrawLine(ccp(50,50), ccp(200,200)); iShouldUpdate = false; } } -(void) updateTheMap { iShouldUpdate

在cocos2d中,通过opengl绘制cclayer的频率是否比每一帧都低?我试过:

-(void) draw
{
     glEnable(GL_LINE_SMOOTH);
     if (iShouldUpdate) {
         ccDrawLine(ccp(50,50), ccp(200,200));   
         iShouldUpdate = false;
     }
}

-(void) updateTheMap
{
     iShouldUpdate = true;
}
然后在需要时调用:updateTheMap,但它只显示1帧

谢谢。

是和否

通常,在渲染新帧之前,会清除帧内容。每一帧都从一个干净的状态开始。现在,若你们要禁用清除屏幕,你们可以画一些东西一次,它会留在屏幕上。但是,如果不清除所绘制的部分,就无法移动所绘制的内容

由于这变得过于复杂,而且很快就容易出错,因此游戏的标准方式一直是在有游戏引擎在开始绘制新框架之前清除框架内容。一个值得注意的例外是DooM,引擎开发人员假设屏幕上的每个像素都会在每一帧更新,除非缺少纹理,在这种情况下,如果不在每一帧清除帧缓冲区,您可以看到著名的情况:

因此,标准是在每一帧重新绘制整个屏幕内容。正因为如此,你不能仅仅每隔几帧就画一些东西,因为如果你这样做,那么你画的任何东西都会在屏幕上显示一帧,然后就消失了


总而言之:你必须在每一个画面上反复画出所有应该在屏幕上可见的东西。几乎所有的游戏引擎都是这样工作的。

你想通过这样做来实现什么?如果你想一个帧实际上是什么(一系列其他帧中的一个帧产生了移动的错觉),那么你不能实际绘制少于每一帧,但你可以提高帧速率。