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

时间:2018-06-08 06:44:05

标签: python pygame pygame-clock

我在python中用pygame编写了一个demo,想要在静态背景上绘制一个移动对象。但我不想更新静态背景。

首先,我想绘制两个图层,一个用于静态背景,另一个用于移动对象。但是,我没有找到任何像图层的属性(就像在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()

1 个答案:

答案 0 :(得分:1)

  

我想要实现的是在开头画背景而不需要重置背景

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

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

有一种更高级的技术(比如仅重绘屏幕区域的背景,其中被另一个表面覆盖),而pygames以不同的Group类的形式提供一些抽象。例如,clear()功能将清除"清除"来自Group的任何精灵的屏幕(通过重绘那些提供表面的区域来实现)。

  

首先,我想绘制两个图层,一个用于静态背景,另一个用于移动对象。但是,我找不到任何属性,如图层

您正在寻找LayeredUpdates类,它会按照_layer - 属性的顺序绘制精灵。

如果你是pygame的新手,你应该研究如何使用pygame的SpriteGroup类,它们可以满足您的需求并且足够好99%的病例。

<强> TL; DR:

您的选择是:

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