Смена сцен в игре openGL

Я продолжаю диалог с openGL и c ++, а пока хочу создать «сцены», которые будут менять друг друга. например, экран с кнопкой «перейти далее», я нажимаю кнопку и затем начинаю игру.
Каков наилучший подход с OpenGL в C ++ для этого? Главный вопрос в том, что делают с командами инициализации перенасыщения, такими как:

glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
glutInitWindowSize(screenWidth, screenHeight);
glutInitWindowPosition(0,0);
glutCreateWindow("Puzzle quest!");

// Registration
glutDisplayFunc(Draw);
glutIdleFunc(Draw);

Нужно ли реализовывать этот метод в обоих классах или только в одном, а затем только «показать кнопку запуска / скрыть функциональность игры, скрыть кнопку запуска / показать функциональность игры + таймер запуска»?

0

Решение

Я не связываюсь с настройками экрана во время смены сцены / режима. Настройки экрана изменяются при изменении размера окна OpenGL, а не при каком-либо событии кнопки …

Вы должны написать свою визуализацию и логику пользовательского интерфейса в зависимости от некоторых переменных, например:

enum _game_screens_enum
{
_game_screen_main_menu=0,
_game_screen_game,
_game_screen_game_over,
_game_screen_help,
_game_screen_intro,
_game_screen_redefine_keys,
_game_screen_high_score,
_game_screen_exit,
};

int screen=_game_screen_main_menu;

Теперь в функции рисования, обновления и обработки пользовательского интерфейса просто добавьте соответствующие if, например:

void draw()
{
if (screen==_game_screen_main_menu)
{
// draw main menu ...
}
else if (screen==_game_screen_game)
{
// draw in game screen stuff...
}
else ...
}

И это все …

1

Другие решения

Вы ищете эффект затухания или какой-то переход, когда они смешиваются? Эффект затухания должен быть легким, если используется альфа-канал … включить смешивание … нарисовать черный квадрат перед всем, поскольку его альфа-значение увеличивается от 0 до 1 в течение любого периода времени, в который вы хотите, чтобы произошло затухание. Появление будет противоположным. Не уверен насчет эффекта смешения сцен … возможно, накопительный буфер или чтение пикселей, а затем нарисуйте пиксели, если вы можете изменить альфа-значения.

В противном случае glutDisplayFunc является правильным способом переключения между сценами / функциями рисования.
Попробуйте просто эффект затухания, это может оказать большую помощь.

1

Вы должны инициализировать перенасыщение только один раз.

Обычно обратные вызовы дисплея и ожидания будут делать разные вещи в зависимости от того, в каком состоянии вы находитесь.

На высоком уровне:

void idle()
{
if (showingMenu)
menu.idle();
else
currentScene.idle();
}

Вы можете сделать это путем переключения функций, но я думаю, что это затрудняет отладку.

(Вы, вероятно, не должны использовать одну и ту же функцию для рисования и холостого хода, хотя.)

1
По вопросам рекламы [email protected]