首页 > 后端开发 > Python教程 > 为什么我的 PyGame 代码没有绘制任何内容?

为什么我的 PyGame 代码没有绘制任何内容?

DDD
发布: 2024-12-26 00:37:13
原创
602 人浏览过

Why Doesn't My PyGame Code Draw Anything?

为什么 PyGame 无法绘制任何内容

您的 PyGame 项目旨在使用 pygame.draw.rect() 创建一个灰色底部和黑色顶部的背景功能。尽管以前使用此功能有成功的经验,但您仍会遇到不一致的绘图结果。有时,您会看到黑屏,而其他时候,屏幕上会出现部分灰色矩形。

造成混乱的原因在于,仅绘图不会在 PyGame 中产生可见输出。修改关联的表面后,您需要更新显示以使这些更改可见。

显示更新

绘图发生在与 PyGame 显示关联的 Surface 对象上。但是,这些更改不会自动反映在显示中。要使它们可见,您必须使用 pygame.display.update() 或 pygame.display.flip() 显式更新显示。

pygame.display.flip() 更新整个显示,而 pygame.display.update() 为屏幕的特定区域提供更具选择性的更新。它通常针对软件显示进行了更优化,但不支持硬件加速显示。

PyGame 应用程序循环

典型的 PyGame 应用程序循环由几个步骤组成:

  1. 事件处理:使用 pygame.event.pump() 或pygame.event.get().
  2. 状态更新:根据输入事件和时间(帧)更新游戏状态和对象位置。
  3. 显示清除:清除显示或绘制背景。
  4. 场景绘制:绘制场景中的所有对象。
  5. 显示更新:调用 pygame.display.update() 或 pygame.display.flip() 使更改可见。
  6. 帧速率限制:限制每秒帧数以避免过多的 CPU 使用pygame.time.Clock.tick.

代码示例

以下是包含显示更新的修改后的代码:

import pygame
from pygame.locals import *
pygame.init()

DISPLAY = pygame.display.set_mode((800,800))
pygame.display.set_caption("thing")
clock = pygame.time.Clock()

run = True
while run:
    # handle events
    for event in pygame.event.get():
        if event.type == QUIT:
            run = False

    # clear display
    DISPLAY.fill(0)

    # draw scene
    pygame.draw.rect(DISPLAY, (200,200,200), pygame.Rect(0,400,800,400))

    # update display
    pygame.display.flip()

    # limit frames per second
    clock.tick(60)

pygame.quit()
exit()
登录后复制

通过合并必要的显示更新,您现在应该看到预期的背景,底部为灰色,顶部为黑色。

以上是为什么我的 PyGame 代码没有绘制任何内容?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板