7

私は OpenGL の初心者で、生の画像を背景として使用するゲームを作成しようとしています。ゲームの開始時にその画像を表示し、それをクリックして後で別の画像を表示できるようにしたいと考えています。この機能を使用してglutMouseFuncみましたが、プログラムを実行しようとすると、プログラムが動作を停止したというメッセージが表示されます。これが私のコードの一部です: 私はグローバル変数 onMouse を持っています。マウス ボタンをクリックすると、変数の値は 1 になり、値が 1 の場合は 2 番目の画像を読み込もうとします。

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 );
4

3 に答える 3

8

順番を間違えています。

glutMouseFunc(mouseClicks);

ここでは、マウスがクリックされたときに呼び出される関数を登録します。

if(onMouse == 1) {

マウスがクリックされたかどうかをすぐに確認します。これら 2 つの行の間の短い期間にマウスがクリックされglutMainLoopた可能性はなく、まだ入力されていないため、プログラムはマウス イベントをリッスンする機会さえありませんでした。


クラッシュに関しては、提供されたコードだけではデバッグできません。デバッガーを試して、クラッシュの原因となっている行を見つけてください。

于 2013-04-19T10:31:55.710 に答える