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

Pygame中Surface旋转无效问题:为何代码未显示旋转正方形?

Pygame旋转正方形不显示问题排查

以下代码意图在Pygame窗口中显示一个旋转30度的正方形,但实际运行后未显示目标图形:

import pygame

WIDTH, HEIGHT = 1024, 768
pygame.init()
WIN = pygame.display.set_mode((WIDTH, HEIGHT))
skala = pygame.image.load("rock2x3b.jpg")

play = True

if __name__ == "__main__":
    FPS = 60
    clock = pygame.time.Clock()
    square = pygame.Surface((50, 50))
    rotated_square = pygame.transform.rotate(square, 30)
    WIN.blit(skala, (0, 0))
    WIN.blit(rotated_square, (60,60))
    pygame.display.flip()
    while play:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                quit(0)

问题原因

  • 未给正方形Surface填充颜色:pygame.Surface((50, 50))创建的Surface默认无填充(透明或与背景难以区分的黑色),即便完成旋转操作,也无法在背景图上显现。
  • 绘制逻辑仅执行一次:当前代码仅在初始化阶段绘制一次图形,虽不是本次不显示的核心原因,但不符合Pygame规范,窗口刷新时容易丢失内容。

修复后的代码

import pygame
import sys

WIDTH, HEIGHT = 1024, 768
pygame.init()
WIN = pygame.display.set_mode((WIDTH, HEIGHT))
skala = pygame.image.load("rock2x3b.jpg")

play = True

if __name__ == "__main__":
    FPS = 60
    clock = pygame.time.Clock()
    # 创建正方形Surface并填充红色
    square = pygame.Surface((50, 50))
    square.fill((255, 0, 0))  # 填充鲜明颜色,确保图形可见
    rotated_square = pygame.transform.rotate(square, 30)
    
    while play:
        clock.tick(FPS)
        # 每次循环重绘背景和图形,避免窗口内容丢失
        WIN.blit(skala, (0, 0))
        WIN.blit(rotated_square, (60, 60))
        pygame.display.flip()
        
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()

修复说明

  • 给正方形Surface添加填充操作:用square.fill((255, 0, 0))填充红色(可替换为其他鲜明颜色),确保旋转后的图形能在背景上清晰显示。
  • 将绘制逻辑移入事件循环:每次循环都重绘背景和图形,保证窗口刷新时内容不会丢失。
  • 规范程序退出逻辑:替换quit(0)为pygame.quit()+sys.exit(),确保退出时正确清理Pygame资源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 10:06:21