You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pygame游戏精灵墙体碰撞检测功能失效问题排查求助

Pygame精灵碰撞检测失效问题修复方案

你的代码存在3处核心逻辑错误,按优先级排列如下:

  • 二维地图数组索引顺序颠倒:文本地图TEXT_LEVEL是按行存储的,第一个索引对应y轴的行号,第二个索引对应x轴的列号,你代码中使用TEXT_LEVEL[x][y]读取格子属性,行列完全颠倒,读取到的是错误的地图数据。
  • 碰撞判断逻辑写反:你预期的逻辑是「碰到墙体=则回退坐标」,但代码中判断条件写为TEXT_LEVEL[x][y] != "=",变成了「不是墙体的时候才回退」,和需求完全相反。
  • 精灵rect更新顺序错误:你在回退坐标前先把rect设置成了错误的新坐标,之后只修改了self.x和self.y,没有同步更新rect的位置,后续渲染和碰撞检测用的还是错误的rect坐标。

修复后代码

def movement(self):
    prevX = self.x
    prevY = self.y

    key = pygame.key.get_pressed()

    if key[pygame.K_w]:
        self.y -= 32
    elif key[pygame.K_s]:
        self.y += 32
    elif key[pygame.K_a]:
        self.x -= 32
    elif key[pygame.K_d]:       
        self.x += 32

    # 计算格子坐标,注意x对应列、y对应行
    grid_col = int(self.x / 32)
    grid_row = int(self.y / 32)

    # 仅当目标格子是墙体时回退坐标
    if TEXT_LEVEL[grid_row][grid_col] == "=":
        print("wall")
        print(grid_col, grid_row)
        print(TEXT_LEVEL[grid_row][grid_col])
        # 先回退坐标,再同步更新rect
        self.x = prevX
        self.y = prevY
        self.rect.topleft = (self.x, self.y)

内容的提问来源于stack exchange,提问作者rob-roibu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 06:54:03