我正在用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()
发布于 2018-06-08 11:06:34
我想要达到的是从一开始就画出背景,而不需要重置背景。
这不可能。当你在屏幕表面画东西的时候,它就在那里。为了摆脱它,你必须画一些新的东西。
最简单的方法就是用纯色填充屏幕,或者将你的背景表面涂到屏幕上,每次主循环迭代一次。
还有一种更高级的技术(比如仅用另一个表面覆盖的背景重新绘制屏幕区域),而pygames提供了一些不同Group
类形式的抽象。例如,有一个clear()
函数,它将从Group
的任何精灵中“清除”屏幕(通过使用提供的表面重绘这些区域)。
首先,我想画两层,一层是静态背景,另一层是运动物体。但是,我没有发现任何类似于层的属性。
您正在寻找LayeredUpdates
类,它将按照它们的_layer
-attribute的顺序绘制它的精灵。
如果你是刚开始玩游戏的人,你应该研究如何使用游戏的Sprite
和Group
类,它们可以满足你的需要,而且在99%的情况下都足够好。
tl;dr:
你的选择是:
1)在游戏循环的每一次迭代中填充屏幕表面。
2)在游戏循环的每一次迭代中都使用精灵和Group
及其clear
函数。
3)使用精灵和LayeredUpdates
-group并添加背景精灵。
https://stackoverflow.com/questions/50754859
复制相似问题