Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用glut重新启动蛇游戏 我用OpenGL和GLUT编写了一个C++蛇游戏。问题是我实现了一个小菜单,有两个按钮:新游戏,退出。“新游戏”部分让我很难接受。我一直在移动这里和那里的代码行,我不知道它应该如何。Main看起来像这样: int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); glutInitWindowSize(800, 600); glutInitWindowPosition(100, 100); glutCreateWindow("Aarghhh! O ramaaa !"); createMenu(); glClearColor(0.0, 0.0, 0.0, 0.0); glutIdleFunc(display_menu); init(); glutReshapeFunc(reshape); glutDisplayFunc(dreptunghi); glutSpecialFunc(player); glutMainLoop(); return 0; }_C++_Opengl_Glut - Fatal编程技术网

使用glut重新启动蛇游戏 我用OpenGL和GLUT编写了一个C++蛇游戏。问题是我实现了一个小菜单,有两个按钮:新游戏,退出。“新游戏”部分让我很难接受。我一直在移动这里和那里的代码行,我不知道它应该如何。Main看起来像这样: int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); glutInitWindowSize(800, 600); glutInitWindowPosition(100, 100); glutCreateWindow("Aarghhh! O ramaaa !"); createMenu(); glClearColor(0.0, 0.0, 0.0, 0.0); glutIdleFunc(display_menu); init(); glutReshapeFunc(reshape); glutDisplayFunc(dreptunghi); glutSpecialFunc(player); glutMainLoop(); return 0; }

使用glut重新启动蛇游戏 我用OpenGL和GLUT编写了一个C++蛇游戏。问题是我实现了一个小菜单,有两个按钮:新游戏,退出。“新游戏”部分让我很难接受。我一直在移动这里和那里的代码行,我不知道它应该如何。Main看起来像这样: int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); glutInitWindowSize(800, 600); glutInitWindowPosition(100, 100); glutCreateWindow("Aarghhh! O ramaaa !"); createMenu(); glClearColor(0.0, 0.0, 0.0, 0.0); glutIdleFunc(display_menu); init(); glutReshapeFunc(reshape); glutDisplayFunc(dreptunghi); glutSpecialFunc(player); glutMainLoop(); return 0; },c++,opengl,glut,C++,Opengl,Glut,其中init、createMenu和display_菜单如下所示: void init(void) { glClearColor(1.0, 1.0, 1.0, 0.0); glMatrixMode(GL_PROJECTION); gluOrtho2D(0.0, 800.0, 0.0, 600.0); glShadeModel(GL_FLAT); } void menu(int num) { if (num == 0) exit(0)

其中init、createMenu和display_菜单如下所示:

 void init(void) {
    glClearColor(1.0, 1.0, 1.0, 0.0);
    glMatrixMode(GL_PROJECTION);
    gluOrtho2D(0.0, 800.0, 0.0, 600.0);
    glShadeModel(GL_FLAT);
 }

 void menu(int num) {
    if (num == 0)
        exit(0);
    else {
        if (num == 1) {
            menu_value = num;           
        }
    }

    //glutPostRedisplay();
 }

 void createMenu(void) {
    glutCreateMenu(menu);
    glutAddMenuEntry("New game!", 1);
    glutAddMenuEntry("Exit", 0);    
    glutAttachMenu(GLUT_RIGHT_BUTTON);
 }

 void display_menu(void){
    if (menu_value == 1) {
        snake.clear();
        i = 30.0;
        j = 30.0;
        alpha = 1.0;
        value = -1;
        speed = 3;
        eaten = true;
        collided_food = false;
        collided_self = false;

        createMenu();
        glClearColor(0.0, 0.0, 0.0, 0.0);
        glutIdleFunc(display_menu);

        init();
        glutDisplayFunc(dreptunghi);
        glutReshapeFunc(reshape);
        glutSpecialFunc(player);
        //glutMainLoop();
    }
    glutSwapBuffers();
 }

问题是:如果我将display_menu的内容放在if语句from menu函数中,它会工作,但我必须调整窗口的大小,以便重新绘制(我意识到这是因为MainLoop需要一个事件,但我不知道如何克服这一点)。如果我一直这样,它不会改变什么好的,只会变得更糟。我不熟悉这一点,我很难弄清楚它是如何工作的。

如果有人有同样的问题,我就是这样解决的:

void menu(int num) {
if (num == 0) {
    if (engine)
        engine->drop();
    exit(0);
}
else {
    if (num == 1) {
        menu_value = num;   
        snake.clear();
        i = 30.0;
        j = 30.0;
        nou.set(i, j);
        snake.push_back(nou);
        alpha = 1.0;
        value = -1;
        speed = 3;
        eaten = true;
        collided_food = false;
        collided_self = false;

        createMenu();
        glClearColor(0.0, 0.0, 0.0, 0.0);

        glClearColor(1.0, 1.0, 1.0, 0.0);
        glutDisplayFunc(dreptunghi);
        glutReshapeFunc(reshape);
        glutSpecialFunc(player);
    }
}
glutSwapBuffers();
glutPostRedisplay();
}

而init()函数保持不变。

Hi。不要编辑问题以包含您找到的答案(或任何与此相关的答案)。相反,你应该回答你自己的问题(如果你真的被鼓励的话),然后你甚至可以接受它。@bolov我照你说的做了。谢谢你的反馈!