我需要定義以便被點擊某一特定區域中的鼠標按鈕時一些動作已經被執行的SDL窗口上矩形區域。限定sdl_rect和sdl_mousebuttondown
我用GetMouseState(x,y)
得到鼠標點擊事件。它可以在鼠標按鈕被點擊的任何地方工作。但是,而是我需要得到鼠標x和y,並檢查它與sdl矩形x和y c,如果矩形是否被點擊。
我需要定義以便被點擊某一特定區域中的鼠標按鈕時一些動作已經被執行的SDL窗口上矩形區域。限定sdl_rect和sdl_mousebuttondown
我用GetMouseState(x,y)
得到鼠標點擊事件。它可以在鼠標按鈕被點擊的任何地方工作。但是,而是我需要得到鼠標x和y,並檢查它與sdl矩形x和y c,如果矩形是否被點擊。
假設您創建一個包含所需矩形的SDL_Rect
結構。當你得到一個座標鼠標點擊它是非常簡單的用矩形座標進行比較:
/* Function to check if a coordinate (x, y) is inside a rectangle */
int check_click_in_rect(int x, int y, struct SDL_Rect *rect)
{
/* Check X coordinate is within rectangle range */
if (x >= rect->x && x < (rect->x + rect->w))
{
/* Check Y coordinate is within rectangle range */
if (y >= rect->y && y < (rect->y + rect->h))
{
/* X and Y is inside the rectangle */
return 1;
}
}
/* X or Y is outside the rectangle */
return 0;
}
較短的版本。請注意寬度和高度的嚴格不等式。我也喜歡將兩個角落可視化,而不是2個區間。
int in_rect(int x, int y, struct SDL_Rect *r) {
return (x >= r->x) && (y >= r->y) &&
(x < r->x + r->w) && (y < r->y + r->h);
}
達特正在尋找...謝謝 – user1234975 2012-02-29 11:09:24
它應該是x < (rect-> x + rect-> w)和y相同。 – Alink 2012-02-28 02:04:41
@Alink啊,是的,謝謝。更新了答案。 – 2012-02-28 03:59:27