我继续使用openGL和c ++进行对话,现在我想创建“场景”,这将会互相改变。例如屏幕按钮“go next”,我按下按钮然后开始游戏。 在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);
我需要在两个类中实现此方法,还是仅在一个类中实现此方法,然后只显示“启动按钮/隐藏游戏功能,隐藏启动按钮/显示游戏功能+启动计时器”?
答案 0 :(得分:1)
您是在寻找淡入淡出效果还是某种混合过渡的过渡?如果使用alpha通道,则淡入淡出效果应该很容易...启用混合...在所有内容之前绘制黑色四边形,因为在您希望淡入淡出发生的任何时间范围内,其alpha值从0增加到1。淡入淡出将是相反的。不确定混合场景效果......可能是缓冲区,或读取像素,然后绘制像素,如果你可以改变alpha值。
否则,glutDisplayFunc是在场景/绘图功能之间切换的正确方法。 试着褪色效果,它可能会有很大的帮助。
答案 1 :(得分:1)
你应该只初始化过剩一次。
通常情况下,显示和空闲回调会根据你所处的状态做不同的事情。
高层次:
void idle()
{
if (showingMenu)
menu.idle();
else
currentScene.idle();
}
你可以通过切换功能来实现,但我认为这会使调试变得更加困难。
(但你可能不应该使用相同的功能进行绘画和空转。)
答案 2 :(得分:1)
在场景/模式更改期间,我不会弄乱屏幕设置。屏幕设置在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 ...
}
就是这样......