首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PySDL2绘图顺序

PySDL2绘图顺序
EN

Stack Overflow用户
提问于 2015-02-18 21:48:09
回答 1查看 610关注 0票数 1

下面的代码绘制一个黑色背景、一个白色框和文本。但是,绘图顺序似乎还没有确定,有时我有背景矩形所覆盖的文本或矩形。我在试着弄明白什么是处理这件事的合适方法?

代码语言:javascript
运行
复制
import sdl2.ext
import sdl2.sdlttf
from sdl2 import SDL_Color, SDL_Init

WHITE = SDL_Color(255, 255, 255)

class Entity(sdl2.ext.Entity):
    def __init__(self, world, sprite, posx=0, posy=0):
        self.sprite = sprite
        self.sprite.position = posx, posy

sdl2.ext.init()

window = sdl2.ext.Window("PySDL2", size=(320, 240))
window.show()
world = sdl2.ext.World()

texture_renderer = sdl2.ext.Renderer(window)
spriterenderer = sdl2.ext.TextureSpriteRenderSystem(texture_renderer)
factory = sdl2.ext.SpriteFactory(sdl2.ext.TEXTURE, renderer=texture_renderer)

world.add_system(spriterenderer)

sdl2.sdlttf.TTF_Init()
font = sdl2.sdlttf.TTF_OpenFont('resources/Helvetica.dfont',32)
text_surface = sdl2.sdlttf.TTF_RenderText_Blended(font, 'test', WHITE).contents
sdl2.sdlttf.TTF_CloseFont(font)

bg = factory.from_color(sdl2.ext.Color(0, 0, 0), size = (320,240))
Entity(world, bg, 0, 0)

c = factory.from_color(sdl2.ext.Color(255, 255, 255), size = (50,50))
Entity(world, c, 100, 100)

text_sprite = factory.from_surface(text_surface)
text_entity = Entity(world, text_sprite, 50, 50)

def run():
    running = True
    while running:
        events = sdl2.ext.get_events()
        for event in events:
            if event.type == sdl2.SDL_QUIT:
                running = False
                break
        world.process()
run()
sdl2.ext.quit()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-23 11:46:48

TextureSpriteRenderSystem的默认实现使用Sprite对象的depth属性来确定绘图顺序。如果所有的精灵都具有相同的深度,它们的绘制顺序是未定的,这会导致你不想要的行为。

深度值为0的Sprite将在深度值较高的Sprite下面(或之前)绘制,例如10。创建的每个Sprite的默认深度为0。可以将背景和矩形的depth设置为负值,以强制执行绘图顺序:

代码语言:javascript
运行
复制
bg = factory.from_color(sdl2.ext.Color(0, 0, 0), size = (320,240))
bg.depth = -99 # always below everything
Entity(world, bg, 0, 0)

c = factory.from_color(sdl2.ext.Color(255, 255, 255), size = (50,50))
c.depth = -1
Entity(world, c, 100, 100)

你可以在PySDL2精灵文档上读到更多关于它的信息。

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

https://stackoverflow.com/questions/28594587

复制
相关文章

相似问题

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