gpt4 book ai didi

c++ - 在 OpenGL C++ 中检测鼠标点击

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:57:56 26 4
gpt4 key购买 nike

我是 OpenGL 的初学者,我正在尝试创建一个游戏,其中我有一个原始图像作为背景。当游戏开始时,我会显示该图像,我希望能够单击它并在之后显示另一个图像。我尝试使用 glutMouseFunc 函数,但是当我尝试运行该程序时,我收到一条消息,提示该程序已停止工作。以下是我的部分代码: 我有一个全局变量 onMouse;如果我单击鼠标按钮,变量的值为 1,如果它的值为 1,我会尝试加载第二张图像。

int onMouse;
void mouseClicks(int button, int state, int x, int y) {
if(button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) {
onMouse = 1;
}
}

这是主要功能:

//load first texture
texture = LoadTextureRAW( "2 Lock screen.raw", TRUE );
glutMouseFunc(mouseClicks);
if(onMouse == 1){
//load second texture
texture = LoadTextureRAW( "in_game.raw", TRUE );
}

我做错了什么?

编辑 我对代码做了一些修改,但背景图片仍然没有改变。这是新的主要功能:

glutCreateWindow("Game");
texture = LoadTextureRAW( "2 Lock screen.raw", 1 );
glutDisplayFunc(display);

glutMouseFunc(mouseClicks);
glutKeyboardFunc(key);

glutMainLoop();

if(onMouse == 1){
texture = LoadTextureRAW( "in_game.raw", 2 );
glutDisplayFunc(display);
}

这是我将纹理映射到四边形的显示函数:

glClearColor( 0.0f, 0.0f, 0.0f, 0.0f );
glClear( GL_COLOR_BUFFER_BIT );

// setup texture mapping
glEnable( GL_TEXTURE_2D );
glBindTexture( GL_TEXTURE_2D, texture );

glPushMatrix();
glBegin( GL_QUADS );
glTexCoord2d(1.0,0.0); glVertex3d(1.0,1.0, 1.0);
glTexCoord2d(0.0,0.0); glVertex3d(-1.0,1.0,1.0);
glTexCoord2d(0.0,1.0); glVertex3d(-1.0,-1.0, -1.0);
glTexCoord2d(1.0,1.0); glVertex3d(1.0,-1.0, 1.0);
glEnd();
glPopMatrix();
glutSwapBuffers();

// free the texture
FreeTexture( texture );

最佳答案

你的顺序错了。

glutMouseFunc(mouseClicks);

在这里注册点击鼠标时调用的函数。

if(onMouse == 1) {

您立即检查是否单击了鼠标。在这两行之间的短暂时间里,鼠标不可能被点击,glutMainLoop 还没有进入,所以你的程序甚至没有机会监听鼠标事件。


至于崩溃,仅凭您提供的代码我无法帮助您调试它。请尝试调试器并找出导致崩溃的行。

关于c++ - 在 OpenGL C++ 中检测鼠标点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16102503/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com