Как установить статический фон с pygame в python? - PullRequest
0 голосов
/ 08 июня 2018

Я пишу демо с pygame на python и хочу нарисовать движущийся объект на статическом фоне.Но я не хочу обновлять статический фон.

Сначала я хочу нарисовать два слоя, один для статического фона и другой для движущегося объекта.Однако я не нахожу никаких атрибутов, таких как слои (как слои в фотошопе).Так как я могу справиться с этим.

вот мой код:

# -*- 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 голосов
/ 08 июня 2018

чего я хочу добиться, так это нарисовать фон в начале и не нужно сбрасывать фон

Это невозможно.Когда вы рисуете что-то на поверхности экрана, это просто там.Чтобы избавиться от этого, вам нужно нарисовать что-то новое.

Самый простой способ - просто заполнить экран сплошным цветом или перетащить поверхность фона на экран после каждой итерации основного цикла.

Существуют более продвинутые методы (например, перерисовываются только области экрана с фоном, который перезаписан другой поверхностью), и pygames предлагает некоторые абстракции в виде различных классов Group.Например, есть функция clear(), которая «очищает» экран от любых спрайтов Group (и делает это путем перерисовки этих областей с предоставленной поверхностью).

Сначала я хочу нарисовать два слоя, один для статического фона, а другой для движущегося объекта.Однако я не нахожу никаких атрибутов, таких как слои

Вы ищете класс LayeredUpdates, который будет рисовать свои спрайты в порядке их _layer -атрибут.

Если вы новичок в Pygame, вы должны изучить, как использовать классы Pygame Sprite и Group, которые будут делать то, что вынужны и достаточно хороши в 99% случаев.


tl; др:

Ваши варианты:

1)заполнять поверхность экрана каждую итерацию игрового цикла
2) использовать спрайты и Group и его функцию clear каждую итерацию игрового цикла
3) использовать спрайты и LayeredUpdates -группу и добавлятьфоновый спрайт

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...