Cocos2D проблема перехода цвета - PullRequest
2 голосов
/ 03 ноября 2011

Я программирую основную игру на cocos2d, и когда я перехожу в одну из моих сцен, на экран добавляется цветной оттенок?Сцена, в которую я перехожу, я переопределил метод draw , потому что мне нужно отрисовать серию цветных линий, чтобы показать игровое поле, и, насколько я знаю, это единственный способ рисоватьих.

Вот код, который выполняет переход:

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

где arcs - это массив моих пользовательских объектов Arc, из которых состоит игровое поле.

Оттенок, применяемый к экрану, зависит от цвета первой дуги вмассив.

Можно ли как-нибудь нарисовать линии один раз, кроме метода draw ?

Любая помощь будет принята с благодарностью.

1 Ответ

3 голосов
/ 04 ноября 2011

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...