【问题标题】:PySDL2 Making multiple SurfacesPySDL2 制作多个表面
【发布时间】:2015-06-22 22:58:04
【问题描述】:

我在几个位置的第一个表面上绘制了一些精灵,我想制作第二个表面并向其添加来自具有透明度的 png 图像的其他一些精灵。问题是我无法正确创建第二个表面和广告 Blit 表面。

下面是一些代码:

    'Library init'
SDL_Init(SDL_INIT_EVERYTHING)

'Creating window'
window = SDL_CreateWindow(b"Game",SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED,screen_width,screen_height,SDL_WINDOW_SHOWN)

'Adding resources'
sprite_names = os.listdir(os.path.join(os.path.dirname(os.path.abspath(__file__)),"res")) 

'Sprite loading'
for sprite in sprite_names:
    sprite_list.append(IMG_Load(os.path.join(os.path.dirname(os.path.abspath(__file__)),"res", sprite).encode("utf-8")))
    print(sprite)

'Creating window surface'
window_surface = SDL_GetWindowSurface(window)
'I am trying to create surface in that way'
second_surface = SDL_CreateSurface()
'PNG file with background'
SDL_BlitSurface(sprite_list[0],None,window_surface,SDL_Rect(0,0))
'Second surface with object with transparency, i dont know how define second surface in PySDL to make it work'
SDL_Blitsurface(sprite_list[1],None,second_surface,SDL_Rect(100,100))
SDL_Blitsurface(second_surface,None,window_surface,None) 

SDL_UpdateWindowSurface(window)

我认为我需要做类似的事情才能在屏幕上显示图层我的意思是它会首先放置我的背景,然后是对象,对吗?当我试图在同一位置绘制两个对象时,我会闪烁或对象上有背景。任何想法如何让它工作?

【问题讨论】:

    标签: python sdl pysdl2


    【解决方案1】:

    我找到了定义第二个表面的方法:

    second_surface = SDL_CreateRGBSurface(SDL_SWSURFACE,screen_width,screen_height,32, 0x000000FF, 0x0000FF00, 0x00FF0000, 0xFF000000)
    

    它是透明表面,现在我发现下一个问题是每次刷新都会使透明度变暗,因为它绘制了多次相同的表面,我使用了该代码并且它起作用了:

    SDL_FillRect(second_surface, None, 0x000000)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 2020-10-29
      相关资源
      最近更新 更多