Pygame点击器游戏第三个矩形点击检测不触发问题求助
问题根因与解决方案
根因分析
- 第三个矩形的点击判定代码混淆了x轴和y轴的坐标参数:
你定义rect3 = pygame.Rect(pos31, pos32, siz31, siz32),其中pos31是矩形的水平左边界,pos32是矩形的垂直上边界。但你的判定代码反过来用pos31判断y轴范围、用pos32判断x轴范围,导致判定区域和实际绘制的rect3完全不重合,自然不会触发。 - 额外隐患:你手动修改了
rect.center属性后,仍然用最初的pos1、pos2做点击判定,后续如果调整rect位置会直接导致判定失效。
解决方案
推荐直接使用Pygame内置的Rect.collidepoint()方法做点击判定,不需要手动维护坐标参数,避免写错轴的问题,修改clickcheck函数即可:
def clickcheck(): global clicks global multi global upp mouse_pos = pygame.mouse.get_pos() print(mouse_pos) # 直接用Rect自带的碰撞检测方法 if rect.collidepoint(mouse_pos): print('Click-Rect') clicks += 1 * multi if rect2.collidepoint(mouse_pos): print('Click-Rect-2') if clicks >= upp: print('Upgrade') multi += 1 clicks -= upp upp = round(upp * multi / 1.677) if rect3.collidepoint(mouse_pos): print('Click-Rect-3')
如果要保留手动判定的写法,将第三个矩形的判定逻辑调整为:
# 修正xy轴参数对应关系 if mousey >= pos32 and mousey <= pos32 + siz32: if mousex >= pos31 and mousex <= pos31 + siz31: print('Click-Rect-3')
内容的提问来源于stack exchange,提问作者user16985310
相关产品推荐
相关产品推荐

