2

我试图为我的游戏制作一个透明窗口作为启动画面。图像具有透明度,但我无法使窗口透明(如查看屏幕、桌面等。)我发现所有的 pygame 都是不行的。有没有我可以从中提取的外部库来实现这一点?顺便提一句。这完全是一个 Linux 项目。所以特定于操作系统也可以。

#Splash Screen
screen = pygame.display.set_mode((680,300), NOFRAME)
splashbg = pygame.image.load("Images/SplashBG.png")
font = pygame.font.Font(None, 36)

pygame.mixer.music.load("OriginalEnd.mp3")
pygame.mixer.music.play(-1)

screen.blit(splashbg,(0,0))
loadingtext = font.render("Loading...", 1, (255,255,255))
screen.blit(loadingtext, (200,250))
pygame.display.flip()
pygame.time.delay(4000)
4

2 回答 2

4

你总是可以用假装透明的方式来修改它。无论如何,这不是一个理想的解决方案,但它可能会奏效..

在启动屏幕之前,使用 PIL 对桌面进行快照,首先对其进行 blit,然后在其上绘制透明图像。这样,它至少会给人一种透明的错觉

有点像:

import ImageGrab, Image 

im = Imagegrab.grab()
im.save('faux_trans.png','png')

for_trans = pygame.image.load('faux_trans.png').convert()

splash = pygame.image.load.... 

screen.blit(for_trans, (0,0))

# and so on. 

就像我说的那样,这不是最好的解决方案,但是如果您启动游戏 NOFRAME 或全屏,您也许可以侥幸逃脱!:)

于 2012-05-01T15:18:03.763 回答
1

对于跨平台解决方案,您可以使用Raylib-Python-CFFI库。

Raylib 具有 2D、3D、字体绘图以及在透明窗口上无法绘制的更多功能:

跨平台透明窗

以上示例的源代码:

from raylib.dynamic import raylib as rl, ffi

rl.SetConfigFlags(rl.FLAG_WINDOW_TRANSPARENT | rl.FLAG_WINDOW_RESIZABLE)
rl.InitWindow(800, 600, b'Transparency Test')


CLEAR = [0] * 4
GREEN = [140, 189, 72, 255]

font_size = 60
camera = ffi.new("struct Camera3D *", [[18.0, 16.0, 18.0], [0.0, 0.0, 0.0], [0.0, 1.0, 0.0], 45.0, 0])

rl.SetCameraMode(camera[0], rl.CAMERA_ORBITAL)

while not rl.WindowShouldClose():
    rl.UpdateCamera(camera)
    rl.BeginDrawing()
    rl.ClearBackground(CLEAR)
    rl.BeginMode3D(camera[0])
    rl.DrawGrid(20, 1)
    rl.DrawCube([0, 0, 0], 2, 2, 2, GREEN)
    rl.EndMode3D()
    rl.DrawText(b'Hello World', 64, 64, font_size, GREEN)
    rl.EndDrawing()
于 2019-10-02T15:14:13.973 回答