Pygame中800×8000地图背景向上移动时无法显示该如何解决?
Pygame背景移动问题修复方案
代码存在的问题
- 缩进错误:
- 事件判断分支下的
running = False没有缩进,属于语法错误,运行会直接报错 - 绘图、坐标更新、屏幕刷新的逻辑全部写在了
while游戏主循环外,程序运行后只会循环执行事件监听,永远不会执行绘图逻辑,自然看不到图片
- 事件判断分支下的
- 坐标设置错误:
- 地图的X坐标设为800,和窗口宽度一致,整张图默认从窗口右侧可视区域外开始绘制,完全不会出现在屏幕上
- 初始Y坐标设为8000,远大于窗口高度600,整张图初始位置在窗口下方可视区域外,要等数千帧后才会进入屏幕范围,正常运行短时间内看不到内容
修复后的完整代码
import pygame pygame.init() clock = pygame.time.Clock() # 屏幕初始化 screen = pygame.display.set_mode((800, 600)) pygame.display.set_caption("RUN!") icon = pygame.image.load('running-icon-png-26.jpg') pygame.display.set_icon(icon) # 地图资源加载与初始坐标设置 mapimg = pygame.image.load('map2.png') # X坐标设为0,让地图左侧对齐窗口左侧 mapimgX = 0 # 初始Y坐标设为0,开局显示地图最顶部;如果要开局显示地图最底部,可改为 600 - 8000 mapimgY = 0 # 游戏主循环 running = True while running: # 事件监听 for event in pygame.event.get(): if event.type == pygame.QUIT: running = False # 绘制地图 screen.blit(mapimg, (mapimgX, mapimgY)) # 地图向上移动,Y坐标逐帧减1 mapimgY -= 1 # 刷新屏幕 pygame.display.update() # 控制帧率60 clock.tick(60) pygame.quit()
注:如果需要避免地图滚动到顶部后出现背景空白,可以再叠加一张同样的地图,两张地图拼接滚动,当第一张完全移出屏幕后重置位置即可实现无限滚动效果。
内容的提问来源于stack exchange,提问作者icekete
相关产品推荐
相关产品推荐

