我正在使用cocos2d编写基本游戏,每当我转换到我的一个场景时,屏幕上会添加彩色色调?我正在转换的场景我已经覆盖了 draw 方法,因为我需要渲染一系列彩色线条以显示游戏板,据我所知,这是唯一的方法吸引他们。
以下是执行转换的代码:
CCTransitionFadeBL *transition = [CCTransitionFadeBL transitionWithDuration:0.5 scene:gameScene];
[[CCDirector sharedDirector] replaceScene:transition];
然后 gameScene 中的draw方法如下所示:
- (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]));
}
}
其中 arcs 是我自定义Arc对象的数组,构成游戏板。
应用于屏幕的色调似乎取决于阵列中第一个弧的颜色。
是否可以将线条绘制一次,而不是在绘制方法中?
非常感谢任何帮助。
答案 0 :(得分: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);
}