Появление и исчезновение объекта в определенное время - PullRequest
0 голосов
/ 27 декабря 2018
int state = 1;
bool turbines_visible = true;

// move the hot air balloon up
// make the square go up
void update(int value) {
    // 1 : move up
    if (state == 1) {
        squareY += 1.0f;
        if (squareY > 650.0) {
            state = 2;
            squareX = -400.0f;
            squareY = 200.0f;
        }
    }
    // 2 : move right
    else if (state == 2) {
        squareX += 1.0f;
        if (squareX > 500.0) {
            state = 3;
            squareX = 0.0f;
            squareY = 600.0f;
        }
    }
    // 3 : move down
    else if (state == 3) {
        squareY -= 1.0f;
        if (squareY < 0.0) {
            state = 0;
        }
    }
    glutTimerFunc(25, update, 0);
    turbines_visible = !turbines_visible;
}

void display() {
    glClear(GL_COLOR_BUFFER_BIT);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    switch (state) {
    case 0:
        drawBackground1();
        break;
    case 1:
        drawBackground1();
        break;
    case 2:
        drawBackground2();
        break;
    case 3:
        drawBackground1();
        break;
    }
    glPushMatrix();
    glTranslatef(squareX, squareY, squareZ);
    // display spray
    drawSpray();
    // display hot air balloon
    drawAirBalloon();
    glPopMatrix();  
    if (turbines_visible) {
        // display first (left) wind turbine
        drawLeftTurbine();
        // display first (right) wind turbine
        drawRightTurbine();
    }
    // display rain
    drawRain();
    calcFPS();
    counter++;
    glFlush();
    glutSwapBuffers();
    glutPostRedisplay();
}

Воздушный шар прекрасно поднимается вверх, но ветряные турбины очень быстро исчезают и исчезают, чего я не хочу.Я хочу, чтобы он был виден в первой сцене, невидим во второй сцене и снова виден в третьей сцене.Я знаю, что проблема в коде glutTimerFunc, потому что он использует 25 миллисекунд, но он мне нужен для моего воздушного шара.Буду признателен, если кто-нибудь поможет мне решить эту проблему.

Нажмите здесь, чтобы увидеть полный код

Сцена 1

enter image description here

Нажмите здесь, чтобы увидеть GIF

Сцена 2

enter image description here

Нажмите здесь, чтобы увидеть GIF

Сцена 3

enter image description here

Нажмите здесь, чтобы увидеть GIF

1 Ответ

0 голосов
/ 27 декабря 2018

Я хочу, чтобы он был видимым в первой сцене, невидимым во второй сцене и снова видимым в третьей сцене.

Условие для turbines_visible должно быть

turbines_visible = !turbines_visible;
turbines_visible = state != 2;

...