2014-08-31 46 views
0

問題很簡單。我想在Python中更改我的SDL2渲染器的Blendmode,但我不知道如何訪問渲染器。如何訪問pySDL2 SoftwareSpriteRenderSystem Blendmode?

PySDL2 Documentation here的狀態,可以用Alpha信道定義的顏色:

類sdl2.ext.Renderer

的BlendMode:用於繪製 操作的混合模式(填充和線)。這可以是值爲

。無混合的SDL_BLENDMODE_NONE

。用於alpha混合的SDL_BLENDMODE_BLEND

。用於添加劑顏色混合的SDL_BLENDMODE_ADD

。 SDL_BLENDMODE_MOD的倍增混色

所有我需要的是將blendMode設置爲SDL_BLENDMODE_BLEND,這樣我就可以使用Alpha通道。我的問題是,我使用的是SoftwareSpriteRenderSystem

self.Renderer = self.SpriteFactory.create_sprite_render_system(self.Window) 

沒有在這裏改變的BlendMode任何明確的方式。我可以嘗試執行以下操作:

SDL_SetRenderDrawBlendMode(self.Renderer,SDL_BLENDMODE_BLEND) 

但這返回:

ArgumentError: argument 1: <type 'exceptions.TypeError'>: expected LP_SDL_Renderer instance instead of SoftwareSpriteRenderSystem

誰能幫助我嗎?我只是希望能夠得到一些透明的精靈(from_rect精靈),但它證明困難的,因爲SDL_renderer無法訪問。

+0

您的問題不明確。你是否想要包含alpha通道的精靈,或者你想在基本的繪製和填充操作上混合? – Marcus 2014-09-01 11:02:15

+0

@Marcus我想要有包含alpha通道的精靈。我使用'from_color'來創建我的基本形狀(不是from_rect我的壞),所以無論你設置透明度的精靈將是我所需要的。 – Micrified 2014-09-01 11:59:16

回答

1

既然你需要或想要的純色精靈,包含alpha通道,混合只會是相關的,如果你真的愛莫能助了屏幕上的東西,是不相關的,當你創建的紋理。

從您最初的問題的混合標誌僅支持,如果你不使用基於軟件的呈現。這意味着你不能使用SpriteFactory,提供了一個SoftwareSpriteRenderSystem,但有一個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) 

注意,您將收到來自SpriteFactoryTextureSprite對象,做讓 您訪問像素與SoftwareSpriteSDL_Surface對象將採用相同的方式。

要創建帶有Alpha通道的TextureSprite,請確保在您的factory.from_color()調用中使用32 bpp和alpha掩碼。

# 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 
+0

所以我需要使用TextureSprites來創建透明度?我的GUI中只有軟件問題。如果我使用SoftwareSpriteRenderSystem渲染我的精靈,我該如何渲染它們? – Micrified 2014-09-01 13:34:20

+0

不,您只需要它們,如果您想使用SDL渲染器的內置混合功能。您也可以使用上面的'from_color()'調用獲得軟件精靈的Alpha透明度。 – Marcus 2014-09-01 14:08:28

+0

好的,謝謝。我以前沒有使用口罩。這是解決方案。現在我可以修改Alpha通道以獲得結果。真棒。然而,看起來你不能讓窗口本身透明。總會有一個代表窗口大小的黑框。可以理解的限制。 – Micrified 2014-09-01 16:22:09