2011-11-03 54 views
2

我正在編程一個基本的遊戲在cocos2d中,每當我轉換到我的一個場景中時,屏幕上會添加一個彩色色調?我正在過渡的場景中,我已經重寫了繪製方法,因爲我需要渲染一系列彩色線條來顯示遊戲板,並且據我所知,這是繪製它們的唯一方法。Cocos2D轉換顏色問題

下面是確實的過渡代碼:

CCTransitionFadeBL *transition = [CCTransitionFadeBL transitionWithDuration:0.5 scene:gameScene]; 
[[CCDirector sharedDirector] replaceScene:transition]; 

然後抽籤方法在gameScene如下所示:

- (void)draw { 
for (Arc *a in arcs) { 

    MyPoint *start = a.start; 
    MyPoint *end = a.end; 

    MyPoint *startLocation = [nodeScreenPositions getElementAtRow:[start getX] column:[start getY]]; 
    MyPoint *endLocation = [nodeScreenPositions getElementAtRow:[end getX] column:[end getY]]; 

    ArcColour colour = a.colour; 

    switch (colour) { 
     case YELLOW: 
      glColor4f(255, 255, 0, 255); 
      break; 
     case BLUE: 
      glColor4f(0, 0, 255, 255); 
      break; 
     case RED: 
      glColor4f(255, 0, 0, 255); 
      break; 
     case GREEN: 
      glColor4f(0, 255, 0, 255); 
      break; 
     case PINK: 
      glColor4f(128, 0, 128, 255); 
      break; 
     case CYAN: 
      glColor4f(0, 255, 255, 255); 
      break; 
     default: 
      glColor4f(255, 255, 255, 1); 
      break; 
    } 
    glLineWidth(2.5f); 
    ccDrawLine(ccp([startLocation getX], [startLocation getY]), ccp([endLocation getX], [endLocation getY])); 
} 
} 

其中是我的自定義數組弧形物體,組成遊戲板。

應用於屏幕的色調似乎取決於陣列中第一個弧的顏色。

有沒有什麼辦法可以劃線一次,而不是在的方法?

任何幫助將不勝感激。

回答

3

OpenGL是由狀態驅動的。在完成之後,在OpenGL中很好的做法是將所有狀態重置爲其先前狀態或默認狀態。這適用於顏色以及線寬,紋理參數和其他GL狀態。

由於您不重置顏色,所以上次設置的顏色將用於未來的OpenGL繪圖方法,直到顏色更改。這就是爲什麼場景轉換顯示彩色背景。

您將在繪製方法結束時重置繪製顏色。此代碼顯示了基本原理:

- (void)draw { 
    // use yellow color 
    glColor4f(255, 255, 0, 255); 

    // draw stuff here ... 

    // reset color to default (black) 
    glColor4f(0, 0, 0, 1); 
} 
+0

這當然是一種改進,但是,現在我的過渡場景是黑色的!他們仍然被染上黑色,現在:) – haironfire907

+0

非常感謝 - 我將重置顏色更改爲白色,並且色調消失了! – haironfire907