Pygame或Python中的透明窗口

2024-09-29 21:26:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试为我的游戏制作一个透明的窗口。图像具有透明度,但我不能使窗口透明(如查看屏幕、桌面等)。。在它的背后)我发现的只是一个禁止玩游戏的游戏。有没有什么外部的库可以让我实现这个目标?顺便说一句,这完全是一个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)

Tags: 图像游戏屏幕displaymusicloadscreenpygame
2条回答

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

Raylib具有2D、3D、字体绘制等功能,远远超过在透明窗口上绘制的功能:

Cross platform transparent window

以上示例的源代码:

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

你总是可以用“贫民窟版”假装透明。无论如何,这都不是一个理想的解决方案。。在

在你启动屏幕之前,用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,或者全屏,你也许可以逃脱惩罚!:)

相关问题 更多 >

    热门问题