iphone - Cocos2D过渡颜色问题

标签 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 对象的数组,它们构成了游戏板。

应用于屏幕的色调似乎取决于数组中第一个弧线的颜色。

有没有什么办法可以让线条绘制一次,而不是在 draw 方法中?

任何帮助将不胜感激。

最佳答案

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

关于iphone - Cocos2D过渡颜色问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8000970/

相关文章:

ios - 更改证书后游戏无法运行

ios - 为 iPhone 和 arm64 构建 pjsip 的 libyuv

iphone - objective-c : a C int array in a class interface?

iphone - 在标签栏前面放一个 View

iphone - 使用 MFMailComposeViewController 的问题

由于 iPad icon.png,iPhone 应用程序验证失败

iphone - 在 cocos2d 上使 iOS 应用程序小于 50MB

iphone - Mac 上的 iOS 模拟器不显示电子邮件或 ActiveSync 选项

iPhone 应用程序在 main.m 中崩溃,没有更多信息..?

objective-c - 从 plist (UITableView) 中删除第一项时应用程序崩溃