我正在开发一个简单的SDL2应用程序,其中包含多个包含按钮的视口。我正在使用LazyFoo教程中的类,并进行了一些小的修改(因此我使用的是教程17中的LButton,我正在使用教程9中的一组视口)。
这是我设置我的按钮位置:
//Buttons in viewport 1
buttons[0].setPosition(12, buttonHeadSpace );
buttons[1].setPosition(24 + BUTTON_WIDTH_DEFAULT, buttonHeadSpace );
//Buttons in viewport 2
buttons[2].setPosition(12,buttonHeadSpace);
buttons[3].setPosition(24 + BUTTON_WIDTH_DEFAULT, buttonHeadSpace);
如您所见,视口1中的按钮在位置整数中的值与视口2中的按钮相同。
这是我使用按钮填充视口:
//viewport 1
SDL_RenderSetViewport( gRenderer, &panelOutlines[0]);
buttons[0].render(buttonSpriteSheetTexture, &*buttonSpriteClips);
buttons[1].render(buttonSpriteSheetTexture, &*buttonSpriteClips);
//viewport 2
SDL_RenderSetViewport( gRenderer, &panelOutlines[3]);
buttons[2].render(buttonSpriteSheetTexture, &*buttonSpriteClips);
buttons[3].render(buttonSpriteSheetTexture, &*buttonSpriteClips);
当然,在LButton对象内部,有一个鼠标悬停检测片段:
int x, y;
SDL_GetMouseState(&x, &y);
//Check if mouse is in button
bool inside = true;
if ( (x < mPosition.x ) || (x > mPosition.x + mButtonWidth) || (y < mPosition.y) || (y > mPosition.y + mButtonHeight) )
{
inside = false;
}
所以问题是鼠标悬停检测是相对于窗口检查鼠标相对于内存中按钮位置的位置,但内存中的按钮位置是相对于视口存储的。因此,当我将鼠标悬停在视口1按钮1上时,我会在视口1按钮1和视口2按钮1上悬停动画。
如何在SDL2中获取相对于视口的鼠标位置?
提前致谢!