Python飞机大战窗口适配方案

核心原理

在游戏开发中,窗口适配需要解决两个关键问题:

  1. 画面拉伸:保持游戏元素比例不变
  2. 居中显示:在不同分辨率下保持游戏画面居中
实现步骤(使用Pygame)
1. 初始化设置
import pygame
import sys

# 设计分辨率(基准分辨率)
DESIGN_WIDTH, DESIGN_HEIGHT = 800, 600

# 初始化窗口(设置为可调整大小)
screen = pygame.display.set_mode((DESIGN_WIDTH, DESIGN_HEIGHT), pygame.RESIZABLE)
pygame.display.set_caption("飞机大战")

# 创建虚拟画面(按设计分辨率绘制)
virtual_surface = pygame.Surface((DESIGN_WIDTH, DESIGN_HEIGHT))

2. 计算适配参数
def calculate_scale_position(current_width, current_height):
    # 计算宽高缩放比例
    scale_x = current_width / DESIGN_WIDTH
    scale_y = current_height / DESIGN_HEIGHT
    
    # 选择最小比例保持画面比例
    scale = min(scale_x, scale_y)
    
    # 计算居中位置
    scaled_width = DESIGN_WIDTH * scale
    scaled_height = DESIGN_HEIGHT * scale
    pos_x = (current_width - scaled_width) // 2
    pos_y = (current_height - scaled_height) // 2
    
    return scale, (pos_x, pos_y, scaled_width, scaled_height)

3. 主循环处理
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        # 窗口大小改变事件
        elif event.type == pygame.VIDEORESIZE:
            screen = pygame.display.set_mode((event.w, event.h), pygame.RESIZABLE)
    
    # 获取当前窗口尺寸
    current_w, current_h = screen.get_size()
    
    # 计算缩放比例和位置
    scale, (x, y, w, h) = calculate_scale_position(current_w, current_h)
    
    # 在虚拟画面绘制游戏内容
    virtual_surface.fill((0, 0, 0))  # 清屏
    # 这里添加游戏绘制代码(使用原始坐标)
    # draw_game(virtual_surface) 
    
    # 缩放并居中显示
    scaled_surface = pygame.transform.scale(virtual_surface, (int(w), int(h)))
    screen.fill((0, 0, 0))  # 填充黑边
    screen.blit(scaled_surface, (x, y))
    
    pygame.display.flip()

pygame.quit()
sys.exit()

关键处理说明
  1. 比例保持

    • 使用最小缩放比例确保画面不变形
    • 计算公式:$ \text{scale} = \min\left(\frac{\text{current_width}}{\text{DESIGN_WIDTH}}, \frac{\text{current_height}}{\text{DESIGN_HEIGHT}}\right) $
  2. 居中计算

    • 黑边位置计算:$ \text{pos_x} = \frac{\text{current_width} - \text{scaled_width}}{2} $
    • 实际显示区域尺寸:$ \text{scaled_width} = \text{DESIGN_WIDTH} \times \text{scale} $
  3. 绘制流程

    • 在虚拟画面使用原始坐标绘制
    • 缩放后居中显示到实际窗口
    • 四周填充黑色保持居中效果
适配效果
分辨率类型 处理方式
宽屏显示器 自动添加上下黑边
竖屏显示器 自动添加左右黑边
等比例分辨率 全屏无黑边显示
极端比例 保持游戏元素比例不变

此方案确保游戏在不同分辨率下都能保持原始设计比例,且画面始终居中显示,避免元素变形或位置偏移问题。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐