Pygame全屏模式下如何获取屏幕宽度设置玩家移动边界
Pygame全屏模式下的屏幕边界限制实现方案
方案1:动态获取全屏分辨率适配原有判断逻辑
不需要提前硬编码固定的屏幕宽度值,在初始化全屏显示表面后,直接从显示表面对象读取当前显示器的实际分辨率即可:
- 初始化全屏窗口时传入
(0,0)作为分辨率参数,Pygame会自动适配当前显示器的全屏分辨率 - 调用显示表面的
get_width()、get_height()方法,就能拿到实时准确的屏幕宽高,适配任意尺寸的显示器
对应代码示例:
import pygame pygame.init() # 初始化全屏显示窗口 screen = pygame.display.set_mode((0, 0), pygame.FULLSCREEN) # 动态获取当前屏幕宽高 display_width = screen.get_width() display_height = screen.get_height() # 玩家参数示例 player_width, player_height = 50, 50 x, y = 100, 100 running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False # 此处编写玩家位置更新逻辑,比如响应按键修改x、y坐标值 # 修正后的边界判断,补全原代码缺失的冒号,同时补充Y轴边界判断 if x < 0 or x > display_width - player_width: crash() if y < 0 or y > display_height - player_height: crash() pygame.display.flip()
注意:如果程序支持运行时切换全屏/窗口模式、切换分辨率,每次切换显示模式后需要重新调用
get_width()/get_height()更新屏幕尺寸值,否则边界判断会失效。
方案2:用Pygame内置Rect方法简化判断
如果不想手动写四个方向的判断条件,可以直接用Pygame的Rect类自带的碰撞检测逻辑,代码更简洁也不容易写错:
# 初始化窗口后直接获取屏幕对应的Rect对象 screen_rect = screen.get_rect() # 游戏循环内的边界判断 player_rect = pygame.Rect(x, y, player_width, player_height) # 判断玩家矩形是否完全在屏幕范围内,超出则触发crash if not screen_rect.contains(player_rect): crash()
这个方法不需要单独存储宽高变量,切换显示模式后只要更新screen_rect = screen.get_rect()即可,适配性更强。
内容的提问来源于stack exchange,提问作者Soham Joshi
相关产品推荐
相关产品推荐

