在Pyglet中Blitting/Loading PNG图像,导致“斑点”图像具有奇怪的alpha层

2024-03-28 20:00:08 发布

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

我试图用pyglet显示PNG图像。PNG图像如下:Image to display

但是,当我尝试使用以下代码呈现时:

if fullscreen:
    window = pyglet.window.Window(caption = "Forsaken Light, by Damian Heaton",
                                  fullscreen = True)
else:
    window = pyglet.window.Window(caption = "Forsaken Light, by Damian Heaton",
                                  fullscreen = False,
                                  width = 500, height = 250)
window.set_icon(pyglet.image.load('icon.ico'))

logo = pyglet.image.load(
    os.path.join("res", "graphics", "temp", "misc", "logo.png"))

class MenuEventHandler(object):
    def on_draw(self):
        window.clear()
        logo.blit((window.width / 2) - (logo.width / 2),
                  window.height - logo.height)

    def on_key_press(self, symbol, modifiers):
        if symbol == key.ESCAPE:
            sys.exit(0)
        return True

    def on_mouse_press(self, x, y, button, modifiers):
        print("Mouse button pressed in menu")
        return True

menu_handlers = MenuEventHandler()

window.push_handlers(menu_handlers)

def stop_game():
    window.pop_handlers()

pyglet.app.run()

如下所示: enter image description here

我试着搜索我的问题所在,但是所有使用Pyglet渲染PNG图像的示例脚本似乎都表明我的代码是正确的。。。在

如有任何帮助,请提前谢谢。在


Tags: 代码图像selftruepngonhandlersdef
2条回答

如果你还在找的话,给你。在

因为它是一个PNG图像,你不能把它放在窗口上,因为它会失去透明度。您需要像pyglet一样导入PNGImageDecoder

from pyglet.image.codecs.png import PNGImageDecoder

然后用它来加载PNG图像

kitten = pyglet.image.load('kitten.png', decoder=PNGImageDecoder())

最后用

kitten.draw(),在指定要使用它们的x和y坐标后。在

上面的文档可以找到here。在

将以下内容添加到on_draw函数的开头:

glEnable(GL_BLEND)
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)

相关问题 更多 >