1

わかりましたので、画面に表示する画像がいくつかあります。実際に知っておく必要があるのは、各 glvertex2f() がポイントであるため、4 つのポイントが接続されていることです。各 glVertex2f は X,Y によって作成されます。この領域の範囲を保存したいので、マウスをクリックしてx、yの結果を取得すると、マウスクリックのx、yがこの領域内にあるかどうかをテストできます。

ここにエリアを作成します

for( int z = 0; z < 6; z++ )
{
if( game->player1.Blockbestand[z] > 0 )
{
    glLoadIdentity();               
    xoff = (z/4.0f);
    yoff = (floor(xoff))/4.0f;

    glBegin(GL_QUADS);
    glTexCoord2f(0/4 + xoff,0/4 + yoff);       glVertex2f( x1,game->camera.height-y1);
    glTexCoord2f(0/4 + xoff,1.0/4 + yoff);    glVertex2f( x2,game->camera.height-y1 );
    glTexCoord2f(1.0/4 + xoff,1.0/4 + yoff); glVertex2f( x2,game->camera.height-y2 );
    glTexCoord2f(1.0/4 + xoff,0/4 + yoff);    glVertex2f( x1,game->camera.height-y2 );
    glEnd();

    x1= x2+10;
    x2 = x1+30;
    xoff = (z/4.0f);
    yoff = (floor(xoff))/4.0f;  
}
}           

そして、ここでマウスクリックを取得します

for (std::list<MouseState>::iterator it = clicks->begin(); it != clicks->end(); it++) {
    if (it->leftButton == true){
        std::cout << "Left click!\n";
        std::cout << "x: " << it->x << "\n";
            std::cout << "y: " << it->y << "\n";
    }

}

だから、どうにかしてその領域を配列に保存できると思います。そして、左ボタンのクリックがtrueになるたびに、x、yを取得し、配列を調べて、その領域にあるかどうかを確認します..しかし、これを行う方法の手がかりはありません..

4

1 に答える 1

0

最初に4点を配列に保存します

locationCheck[m][n] = x1;
locationCheck[m][n+1] = x2;
locationCheck[m][n+2] = game->camera.height-y1;
locationCheck[m][n+3] = game->camera.height-y2;


m++;

次に、マウスの x/y が 4 点の間にあるかどうかを確認します。

void GameScreen::menuClickCheck(int x,int y){
int m = 0;
int n=0;
while (m < 32){
    if (locationCheck[m][n] < x && locationCheck[m][n+1] > x) 
        if (locationCheck[m][n+2] > y && locationCheck[m][n+3] < y)
            {
            switch (m)
            {
                case 0 : cout << "Type=DefaultLand \n";
                break;
                case 1 : cout << "Type=Lava \n";
                break;
                case 2 : cout << "Type=Stone \n";
                break;


            }//end switch
        m=32;
    }//endif
    m++;
}//whileloop

}
于 2013-05-03T05:29:02.920 に答える