Pygame开发捉人游戏如何判断两坐标差值在10以内触发if语句
Pygame捉人游戏碰撞判定逻辑修正
现有代码问题说明
- 当前代码中使用的
&是Python位运算符,并非逻辑判断所用的and,即使仅需要判断坐标完全相等的场景,也需要替换为and才能得到正确的判断结果。 - 此前使用
range()判定不生效的核心原因有两点:- Python的
range()为左闭右开结构,例如range(10)仅覆盖0到9的整数,若要覆盖正负10以内的区间需要写为range(-10, 11),书写逻辑繁琐 - 若游戏中坐标存在浮点数(例如开启了移动平滑、帧率插值等逻辑),浮点数无法匹配整数类型的
range()元素,会永远返回False
- Python的
正确实现方案
直接计算两点坐标差值的绝对值进行判定,兼容整数、浮点数类型的坐标,写法简洁性能更优:
if abs(pos[0] - enemypos[0]) <= 10 and abs(pos[1] - enemypos[1]) <= 10: font = pygame.font.SysFont('Calibri', 25, True, False) gameovertext = font.render("You're IT", True, WHITE) screen.blit(gameovertext, [x_mouse+10, y_mouse+10])
内容的提问来源于stack exchange,提问作者MattMcL
相关产品推荐
相关产品推荐

