我正在尝试编写一些代码,在其中检查鼠标是否已在某个 SDL Surface 上单击。在下面的代码示例中,我有 SDL_Surface 背景,我试图检查鼠标位置。
bool checkCollide(int myx, int myy, SDL_Surface* objectOne){
if(myx < objectOne->clip_rect.x) return false;
if(myx > objectOne->clip_rect.x + objectOne->clip_rect.w) return false;
if(myy < objectOne->clip_rect.y) return false;
if(myy > (objectOne->clip_rect.y + objectOne->clip_rect.h)) return false;
return true;
}
void main(){
SDL_Surface* background;
while(SDL_PollEvent(&event)){
if(event.type == SDL_MOUSEBUTTONDOWN){
if(checkCollide(event.button.x, event.button.y, background){
// run events
}
}
}
我遇到的问题是,当我尝试如上所示运行它时,代码编译得很好,但没有做任何事情。碰撞检查总是失败。我已经尝试了很多不同的组合,包括将 checkCollide 的参数更改为 SDL_Rect 并传递 Surface 的 clip_rect 属性。我完成它的唯一完全成功的方法是拥有一个与 SDL_Surface 具有相同大小和位置的单独 SDL_Rect,并检查碰撞。当我以这种方式运行它时,一切都按我的预期工作。为什么表面(或 clip_rect)没有正确通过,或者如果是,我在 checkCollide 函数中做错了什么导致它失败?