我的问题sdl2.ext.Renderer
主要与我在尝试在sdl2.ext.Window
表面上渲染精灵时遇到的问题有关。
所以现在,为了在 SDL2 窗口上着色我的背景,我进行了以下调用:
White = sdl2.ext.Color(255,255,255)
class Background(sdl2.ext.SoftwareSpriteRenderSystem):
def __init__(self,window):
super(Background,self).__init__(window)
sdl2.ext.fill(self.surface,White)
这会将 Window 的表面着色为白色背景。但是,我也想在屏幕上显示文本。这是通过TextureSprite
使用类的from_text
方法创建一个来完成的sdl2.ext.SpriteFactory
,如下所示:
Renderer = sdl2.ext.Renderer(W) # Creating Renderer
ManagerFont = sdl2.ext.FontManager(font_path = "OpenSans.ttf", size = 14) # Creating Font Manager
Factory = sdl2.ext.SpriteFactory(renderer=Renderer) # Creating Sprite Factory
Text = Factory.from_text("Unisung Softworks",fontmanager=ManagerFont) # Creating TextureSprite from Text
Renderer.copy(Text, dstrect= (0,0,Text.size[0],Text.size[1])) # Resizing the Texture to fit the text dimensions when rendered
运行事件循环时会出现问题。
running = True
while running:
events = sdl2.ext.get_events()
for event in events:
if event.type == sdl2.SDL_QUIT:
running = False
break
if event.type == sdl2.SDL_MOUSEBUTTONDOWN:
pass
Renderer.copy(Text, dstrect= (0,0,Text.size[0],Text.size[1]))
Renderer.present() # Problem 1
W.refresh() # Problem 2
return 0
当同时调用 Renderer.present() 和 W.refresh() 时,我会从屏幕上看到闪烁效果。这似乎是因为渲染器覆盖了白色窗口表面,然后通过 Window.refresh() 调用再次着色。然后重复,导致闪烁的混乱。
我想知道我能做些什么来解决这个问题?我是否应该同时使用 Window.refresh() 和 Renderer?有没有办法让一个渲染另一个?(例如渲染器渲染背景)。如果有人可以帮助我,那就太好了。