如何让Pygame小游戏的敌人支持跨屏幕环绕边界跟随玩家
问题根源
你当前的敌人追踪逻辑只计算了玩家和敌人在单一屏幕坐标系下的坐标差,没有考虑屏幕环绕的特殊规则:比如玩家站在屏幕左边缘、敌人站在屏幕右边缘时,两者的实际最短路径是直接穿过边界,而不是沿着屏幕走完整条宽度。
具体修改方案
你只需要调整敌人的坐标差计算逻辑,再给敌人加上和玩家一致的屏幕环绕规则即可:
- 修正坐标差计算:计算x、y方向差值时,分别对比基础差值、加屏幕宽/高、减屏幕宽/高三个选项,取绝对值最小的作为最终差值,保证敌人永远走最短路径(包括穿边界的路径)
- 给敌人添加环绕逻辑:敌人移动完成后,执行和玩家完全相同的边界判断逻辑,出界后从对侧重新进入屏幕
以你代码里的魔鬼(devil)AI为例,修改后的逻辑如下,史莱姆(slime)的AI做完全相同的修改即可:
# 魔鬼AI 修改版 # 计算x方向最短路径的差值 dx = player.x - enemy.x if abs(dx + display_width) < abs(dx): dx += display_width elif abs(dx - display_width) < abs(dx): dx -= display_width # 计算y方向最短路径的差值 dy = player.y - enemy.y if abs(dy + display_height) < abs(dy): dy += display_height elif abs(dy - display_height) < abs(dy): dy -= display_height dist = math.hypot(dx, dy) if dist > 0: enemy.x += min(EnemyVel, dist) * dx / dist enemy.y += min(EnemyVel, dist) * dy / dist # 给魔鬼添加屏幕环绕逻辑 if enemy.x <= -40: enemy.x = enemy.x + 1300 if enemy.x >= 1300: enemy.x = enemy.x - 1340 if enemy.y <= -40: enemy.y = enemy.y + 700 if enemy.y >= 700: enemy.y = enemy.y - 740
修改完成后敌人就会自动选择最短路径追踪玩家,包括直接穿过屏幕边界,不会再绕整个屏幕走了。
内容的提问来源于stack exchange,提问作者PhoenixAnton
相关产品推荐
相关产品推荐

