在游戏打开GL中更改场景
Change scenes in game openGL
我继续与OpenGL和C ++进行对话,现在我想制作"场景",这将相互改变。 例如,带有"下一步"按钮的屏幕,我按下按钮,然后开始游戏。为此,在 c++ 中使用 openGL 的最佳方法是什么?主要问题是 glut 初始化命令是什么,例如:
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
glutInitWindowSize(screenWidth, screenHeight);
glutInitWindowPosition(0,0);
glutCreateWindow("Puzzle quest!");
// Registration
glutDisplayFunc(Draw);
glutIdleFunc(Draw);
我是否需要在两个类中实现此方法,还是仅在一个类中实现此方法,然后仅"显示开始按钮/隐藏游戏功能,隐藏开始按钮/显示游戏功能+启动计时器"?
在场景/模式更改期间,我不会弄乱屏幕设置。屏幕设置在调整 OpenGL 窗口大小时更改,而不是在某些按钮事件上更改...
您必须根据某些变量编写可视化和UI逻辑内容,例如:
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;
现在在绘制,更新和UI处理函数中,只需添加适当的ifs,例如:
void draw()
{
if (screen==_game_screen_main_menu)
{
// draw main menu ...
}
else if (screen==_game_screen_game)
{
// draw in game screen stuff...
}
else ...
}
就是这样...
您是否正在寻找淡入淡出效果或某种混合它们的过渡?如果使用阿尔法通道,淡入淡出效果应该很容易...启用混合...在所有内容前面绘制黑色四边形,因为它的 alpha 值在您希望淡入淡出的任何时间范围内从 0 增加到 1。淡入将是相反的。不确定混合场景效果...如果可以更改 Alpha 值,则可能是累积缓冲区,或者读取像素然后绘制像素。
否则,glutDisplayFunc 是在场景/绘图函数之间切换的正确方法。尝试淡入淡出效果,这可能会有很大帮助。
你应该只初始化一次 glut。
通常,显示和空闲回调会根据您所处的状态执行不同的操作。
在高层次上:
void idle()
{
if (showingMenu)
menu.idle();
else
currentScene.idle();
}
您可以通过切换函数来做到这一点,但我认为这使得调试更加困难。
(不过,您可能不应该使用相同的函数进行绘制和空闲。
相关文章:
- 在C++游戏中与库存系统作斗争
- 换位表导致测试失败(但在游戏中运行良好)
- Craps游戏问题,忽略if语句
- 矢量下标超出SFML游戏中的范围
- 我是 c++ 的新手.学习基本知识后,我想做井字游戏.对于印刷板,我在下面写代码,但它显示错误
- 我在贪吃蛇游戏中收到了错误代码 -1073741571
- 我应该在简单的策略游戏中为各个派系使用类吗 - C++
- 游戏体验和升级
- 我的代码运行良好,但在游戏循环中中断
- 如何使用 SFML 在贪吃蛇游戏中定义游戏结束?
- 我可以使用任何好的逻辑来阻止计算机将 O 放在井字游戏中的现有 X 上
- 将鼠标和键盘输入发送到 unity3d 游戏 (Rust)
- 在猜谜游戏 c++ 中不计算尝试次数
- 在C++不适用于猜数字游戏的情况下再次播放选项
- 在为我的基于文本的 RPG 游戏制作库存时遇到困难
- 在定义字符数组(井字游戏)的 for 循环中应用输入限制
- Visual Studio 19-17 库兼容性根据 GL 标志
- Frank Luna 在他的书"使用 DirectX12 进行 3D 游戏编程"的介绍中盒子示例的问题
- 如何在Linux上正确发布C++软件(游戏)
- 在游戏打开GL中更改场景