1

いくつかの場所で最初の表面にいくつかのスプライトを描画しています.2番目の表面を作成し、透明なpng画像から他のスプライトを追加したいと考えています。問題は、2 番目のサーフェスとアド ブリット サーフェスを適切に作成できないことです。

これがどのように見えるかのコードです:

    '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)

画面にレイヤーを表示するには、そのようなことをする必要があると思います。つまり、最初に背景を配置し、次にオブジェクトを配置しますよね? 同じ場所に 2 つのオブジェクトを描画しようとすると、ちらつきやオブジェクトの背景が表示されます。それを機能させる方法はありますか?

4

1 に答える 1

2

2 番目のサーフェスを定義する方法を見つけました。

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

それは透明な表面です。次の問題は、そのコードを使用して同じ表面を複数回描画していたため、更新ごとに透明度を暗くしていることでした。

SDL_FillRect(second_surface, None, 0x000000)
于 2015-06-22T14:58:04.117 に答える