Cocos2D过渡色问题

时间:2011-11-03 19:49:58

标签: iphone objective-c cocos2d-iphone

我正在使用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对象的数组,构成游戏板。

应用于屏幕的色调似乎取决于阵列中第一个弧的颜色。

是否可以将线条绘制一次,而不是在绘制方法中?

非常感谢任何帮助。

1 个答案:

答案 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);
}