1

我正在用 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()
4

1 回答 1

1

我想要实现的是在开始时绘制背景并且不需要重置背景

那是不可能的。当您在屏幕表面绘制一些东西时,它就在那里。为了摆脱它,你必须画一些新的东西。

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

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

一开始我想画两层,一层用于静态背景,另一层用于移动物体。但是,我没有找到像图层这样的任何属性

你正在寻找这个LayeredUpdates类,它将按照它们的 - 属性的顺序绘制它的精灵_layer

如果您是 pygame 的新手,您应该研究如何使用 pygameSpriteGroup类,它们可以满足您的需要,并且在 99% 的情况下都足够好。


tl;博士:

您的选择是:

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

于 2018-06-08T11:06:34.023 回答