Pygame中DukeSprite点击判定范围异常问题求助
解决DukeSprite点击区域判断错误的问题
嘿,我刚看到你的问题啦!作为同样啃过《像计算机科学家一样思考(第3版)》的过来人,我一眼就瞅出你代码里的小问题啦😉
你怀疑的没错,问题确实出在contains_point方法的return语句里!你写的x + my_width这部分完全不符合逻辑——在布尔判断里,只要这个表达式的结果不是0,就会被当成True处理。这就导致只要点击位置的x坐标大于等于精灵的左边界my_x,不管右边超出精灵范围多远,这部分判断都会成立,自然就出现了“点击右侧任意区域都触发动画”的问题。
正确的判断逻辑
你需要把x + my_width改成x < my_x + my_width,这样才能限制x坐标在精灵的宽度范围内。修正后的return语句应该是:
return (x >= my_x and x < my_x + my_width and y >= my_y and y < my_y + my_height)
逻辑解释
这个判断的核心是确保点击的点(x,y)同时落在精灵的矩形区域内:
x >= my_x:点击位置的x坐标不小于精灵的左边界x < my_x + my_width:点击位置的x坐标小于精灵的右边界(左边界+宽度)y >= my_y:点击位置的y坐标不小于精灵的上边界y < my_y + my_height:点击位置的y坐标小于精灵的下边界(上边界+高度)
这样修改后,就只有点击精灵本身的时候才会触发动画啦!
内容的提问来源于stack exchange,提问作者sco assasin
相关产品推荐
相关产品推荐

