如何访问pySDL2的SoftwareSpriteRenderSystem混合模式?
这个问题很简单。我想在Python中为我的SDL2渲染器更改混合模式,但我不知道怎么访问渲染器。
PySDL2的文档提到,你可以定义带有透明度的颜色:
class sdl2.ext.Renderer
blendmode: 用于绘制操作(填充和线条)的混合模式。这可以是以下值:
. SDL_BLENDMODE_NONE 表示不混合
. SDL_BLENDMODE_BLEND 表示使用透明度混合
. SDL_BLENDMODE_ADD 表示加法颜色混合
. SDL_BLENDMODE_MOD 表示乘法颜色混合
我只需要将混合模式设置为SDL_BLENDMODE_BLEND,这样我就可以使用透明度通道。我的问题是,我正在使用SoftwareSpriteRenderSystem。
self.Renderer = self.SpriteFactory.create_sprite_render_system(self.Window)
这里没有明确的方法来更改混合模式。我可以尝试这样做:
SDL_SetRenderDrawBlendMode(self.Renderer,SDL_BLENDMODE_BLEND)
但这会返回:
ArgumentError: argument 1: <type 'exceptions.TypeError'>: expected LP_SDL_Renderer instance instead of SoftwareSpriteRenderSystem
有没有人能帮帮我呢?我只是想得到一些透明的精灵(from_rect精灵),但因为无法访问SDL渲染器,这变得很困难。
1 个回答
因为你需要或者想要有实色的精灵,并且这些精灵包含透明度通道,所以混合效果只有在你实际在屏幕上渲染东西时才有意义,而在你创建纹理时就不重要了。
你最开始提到的混合标志只有在你不使用软件渲染的情况下才支持。这意味着你不能使用提供SoftwareSpriteRenderSystem
的SpriteFactory
,而应该使用带有TEXTURE
精灵类型的SpriteFactory
。
下面是一个简单的例子,展示如何为一个窗口创建基于纹理的渲染器和工厂:
window = sdl2.ext.Window("Test", size=(800,600))
renderer = sdl2.ext.Renderer(window)
# use renderer.blendmode = ... to change the blend mode
factory = sdl2.ext.SpriteFactory(sdl2.ext.TEXTURE, renderer=renderer)
rsystem = factory.create_sprite_render_system(window)
请注意,你将从SpriteFactory
中获得TextureSprite
对象,而这些对象不允许你像SoftwareSprite
或SDL_Surface
对象那样访问像素。
要创建一个带有透明度通道的TextureSprite
,确保在你的factory.from_color()
调用中使用32位每像素(bpp)和一个透明度掩码。
# Create a solid, quadratic, red texture of 100px in size, using a RGBA color layout.
factory.from_color(0xFF000000, size=(100, 100),
masks=(0xFF000000, # red channel
0x00FF0000, # green channel
0x0000FF00, # blue channel
0x000000FF)) # alpha channel