Я пытаюсь улучшить игровую программу MoonLander - просто пытаюсь понять вещи немного лучше.
Я хочу добавить предупреждение, когда топливо падает ниже определенного уровня, и я хотел бы, чтобы это предупреждениеизменить цвет.Мой игровой цикл работает со скоростью около 30 кадров в секунду.Поэтому я создал переменную-член, которая «устанавливает» INT на определенное количество кадров.Я сделал некоторую проверку - и мой код счетчика кадров работает должным образом - как и моя функция setWhichColour.Текст отображается на экране, но каждый раз он рисует белым ...
Вот код, который устанавливает переменную-член "color"
if (lander.getFuel() < 200)
{
incrementFrameCounter();
if (frameCounter % 15 == 0)
{
setWhichColour(0);
}
else if (frameCounter % 20 == 0)
{
setWhichColour(1);
}
else if (frameCounter % 50 == 0)
{
setWhichColour(2);
}
else
{}
drawText(Point(40, 40), "Warning: Fuel Below 200",getWhichColour());
}
А вот drawTextфункция, которую я использую, чтобы нарисовать текст на экране.Оператору case только что передается целочисленное значение, чтобы выбрать, какую последовательность glColor3f запустить.Функция drawText запускается один раз каждый раз, когда проходит игровой цикл.
void drawText(const Point & topLeft, const char * text, int iColour)
{
void *pFont = GLUT_BITMAP_HELVETICA_12;
// prepare to draw the text from the top-left corner
glRasterPos2f(topLeft.getX(), topLeft.getY());
glPushAttrib(GL_CURRENT_BIT); // <-- added this after finding another answer
switch (iColour)
{
case 0: // red
glColor3f(1.0 /* red % */, 0.0 /* green % */, 0.0 /* blue % */);
case 1: // green
glColor3f(0.0 /* red % */, 1.0 /* green % */, 0.0 /* blue % */);
case 2: //blue
glColor3f(0.0 /* red % */, 0.0 /* green % */, 1.0 /* blue % */);
default: //white
glColor3f(1.0 /* red % */, 1.0 /* green % */, 1.0 /* blue % */);
}
// loop through the text
for (const char *p = text; *p; p++)
glutBitmapCharacter(pFont, *p);
glPopAttrib(); // <-- added this after finding another answer
}
Я нашел этот ответ, который представляется актуальным: Как установить цвет текста в OpenGl
Я отметил выше, где я скопировал код из этого ответа, который, кажется, должен помочь.
К сожалению, мой текст все еще выходит белым.Это не устанавливает цвет вообще.Я подозреваю, что упускаю что-то фундаментальное (и, вероятно, простое), но я просто не смог увидеть, что.
Может кто-нибудь определить, что мне нужно сделать, чтобы текст отображался другим цветом?честно говоря, я бы даже был рад, если бы он отображался в любом цвете, кроме белого, даже если он не изменился ...
Вот скриншот игры в действии: