首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在蟒蛇中设置一个静态的游戏背景?

如何在蟒蛇中设置一个静态的游戏背景?
EN

Stack Overflow用户
提问于 2018-06-08 06:44:04
回答 1查看 962关注 0票数 1

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

首先,我想画两层,一层是静态背景,另一层是运动物体。但是,我没有发现任何属性类似于图层(就像photoshop中的图层)。那我该怎么处理呢。

这是我的代码:

代码语言:javascript
运行
复制
# -*- 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()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-08 11:06:34

我想要达到的是从一开始就画出背景,而不需要重置背景。

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

最简单的方法就是用纯色填充屏幕,或者将你的背景表面涂到屏幕上,每次主循环迭代一次。

还有一种更高级的技术(比如仅用另一个表面覆盖的背景重新绘制屏幕区域),而pygames提供了一些不同Group类形式的抽象。例如,有一个clear()函数,它将从Group的任何精灵中“清除”屏幕(通过使用提供的表面重绘这些区域)。

首先,我想画两层,一层是静态背景,另一层是运动物体。但是,我没有发现任何类似于层的属性。

您正在寻找LayeredUpdates类,它将按照它们的_layer-attribute的顺序绘制它的精灵。

如果你是刚开始玩游戏的人,你应该研究如何使用游戏的SpriteGroup类,它们可以满足你的需要,而且在99%的情况下都足够好。

tl;dr:

你的选择是:

1)在游戏循环的每一次迭代中填充屏幕表面。

2)在游戏循环的每一次迭代中都使用精灵和Group及其clear函数。

3)使用精灵和LayeredUpdates-group并添加背景精灵。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50754859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档