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

Pygame中Brick精灵仅左侧显示、位置偏移问题求助

问题修复方案

你的代码存在3个核心逻辑错误,逐一修改即可解决显示异常问题:

1. 精灵内部绘制坐标错误

所有Surface的pg.draw.rect()绘制操作,坐标都是相对于当前Surface自身的左上角,而非全局屏幕坐标,你现在传入全局x/y参数,导致绘制内容完全超出了精灵自身Surface的可视范围,所以显示不全/空白。
需要修改两处代码:

  • game_layout.py的Brick类绘制行改为:
pg.draw.rect(self.image,ai_set.brick_inside_color, [0,0,self.width,self.height])
  • game_layout.py的ActionScreen类做两处修改:
    1. 绘制行改为:
    pg.draw.rect(self.image, ai_set.action_color, [0,0, self.width,self.height])
    
    1. 给rect设置正确的全局位置:
    self.rect = self.image.get_rect(topleft=(self.x, self.y))
    

另外Settings类里的action_h参数设置不合理,当前值等于全屏高度,会导致动作屏超出屏幕下方,建议修改为:

self.action_h = self.screen_h - self.data_h

2. 右侧砖块坐标计算错误

main.py中创建brick2的参数完全错误:

  • x坐标ai_set.action_x+ai_set.action_w刚好等于屏幕总宽度,砖块会完全显示在屏幕外,正确值应为ai_set.screen_w - ai_set.brick_fill_w
  • y坐标ai_set.data_h-ai_set.data_h/2会让砖块初始位置跑到顶部数据栏上方,和左侧砖块位置不统一,改为和左侧一致的ai_set.data_h即可
    修改后brick2的创建代码为:
brick2 = Brick(ai_set, ai_set.screen_w - ai_set.brick_fill_w, ai_set.data_h)

3. 绘制层级问题

当前update函数的绘制顺序为「背景→动作屏→数据屏→砖块」,会导致砖块盖在顶部数据栏上方。如果希望数据栏始终在最顶层,调整绘制顺序即可:

def update(ai_set,screen,data_s,action_s,brick,brick2):
    screen.fill(ai_set.BLACK)
    # 先画底层元素
    screen.blit(brick.image,brick.rect)
    screen.blit(brick2.image,brick2.rect)
    screen.blit(action_s.image, action_s.rect)
    # 最后画顶层元素
    screen.blit(data_s.image,data_s.rect)
    pg.display.update()

以上修改全部完成后,两侧砖块即可正常显示在预期位置。

内容的提问来源于stack exchange,提问作者mooseturd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 01:15:04