2012-06-12 2 views
2

coco2d에서 모든 프레임보다 자주 opengl을 통해 cclayer를 그릴 수 있습니까? 나는 시도했다 :모든 프레임보다 적은 opengl로 그리기

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

-(void) updateTheMap 
{ 
    iShouldUpdate = true; 
} 

그리고 나서 : updateTheMap를 호출한다.

감사합니다.

+0

그렇게함으로써 무엇을 달성하려고합니까? – giorashc

+0

실제로 프레임이 무엇인지 생각하면 (움직임의 환영을 만드는 일련의 다른 프레임 중 하나), 실제로 모든 프레임보다 작은 프레임을 그릴 수는 없지만 프레임 속도를 높일 수는 있습니다. – pasawaya

답변

1

예 아니요.

일반적으로 새 프레임이 렌더링되기 전에 프레임 내용이 지워집니다. 모든 프레임은 깨끗한 상태에서 시작됩니다. 이제 화면을 지울 수 없게되면 한 번 그릴 수 있고 화면에 남아있을 수 있습니다. 그러나 그 때 그린 부분을 정확히 지우지 않으면 그려진 부분을 움직일 수 없습니다.

이것은 너무 복잡해지고 오류가 발생하기 쉽기 때문에 새 프레임을 그리기 전에 프레임 내용을 지우는 게임 엔진이 있기 때문에 게임의 표준 방법은 계속되었습니다. 한 두드러진 예외는 DooM으로, 엔진 개발자가 화면의 모든 픽셀을 매 프레임마다 업데이트한다고 가정합니다. 누락 된 텍스처가없는 경우가 아니면 프레임 버퍼를 모두 지우지 않을 때 발생하는 유명한 Halls of Mirrors (HOM) effect을 볼 수 있습니다 프레임 :

enter image description here

그래서 표준 다시 모든 프레임을 전체 화면 내용을 그릴 것입니다. 그 때문에 프레임의 모든 프레임을 그릴 수는 없습니다. 그렇게하면, 그려진 모든 것이 한 프레임 동안 화면에 표시되고 나면 사라지게 될 것이기 때문입니다.

총합 : 매 프레임마다 반복적으로 화면에 표시되어야하는 모든 것을 그려야합니다. 이것이 거의 모든 게임 엔진이 작동하는 방식입니다.

관련 문제