如何在python中使用pygame设置静态背景?

How to set a static background with pygame in python?

我正在 python 中用 pygame 编写一个演示,想在静态背景上绘制一个移动的对象。但是我不想更新静态背景。

一开始我想画两层,一层是静止的背景,一层是运动的物体。但是,我没有找到任何类似图层的属性(就像 photoshop 中的图层一样)。那我该怎么处理呢

这是我的代码:

# -*- coding: utf-8 -*-
import sys
from settings import Settings
import pygame
import math


def run_game():
    # 
    pygame.init()
    ai_settings = Settings()
    screen = pygame.display.set_mode((ai_settings.screen_width, ai_settings.screen_height))
    pygame.display.set_caption("Catch Me If You CAN")

    radius = 10

    # 
    while True:

        # 
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()

        # 
        screen.fill(ai_settings.bg_color)

        pygame.draw.rect(screen, [0, 0, 0], [math.cos(radius)*100+300, math.sin(radius)*50+200, 10, 10], 4)

        radius = radius + 0.1

        # 
        pygame.display.flip()


run_game()

what I want to achieve is to draw the background at the beginning and need not to reset the background

这不可能。当你在屏幕表面画东西时,它就在那里。要摆脱它,你必须画一些新的东西。

最简单的方法是只用纯色填充屏幕,或者在主循环的每次迭代中将背景表面 blit 到屏幕。

有更高级的技术(比如只重绘屏幕上被另一个表面覆盖的背景区域),pygames 提供了一些不同形式的抽象Group classes。例如,有一个 clear() 函数可以 "clear" 来自 Group 的任何精灵的屏幕(并通过使用提供的表面重新绘制这些区域来实现)。

At first I want to draw two layers, one for the static background and the other for the moving object. However, I do not find any attribute like layers

您正在寻找 LayeredUpdates class,它将按照其 _layer 属性的顺序绘制其精灵。

如果您是 pygame 的新手,您应该了解如何使用 pygame 的 Sprite and Group classes,它将满足您的需要并且在 99% 的情况下都足够好。


tl;博士:

您的选择是:

1) 在游戏循环的每次迭代中填充屏幕表面
2) 在游戏循环的每次迭代中使用精灵和 Group 及其 clear 函数
3) 使用精灵和 LayeredUpdates-group 并添加背景精灵