在pyglet窗口中加载多个PNG

时间:2016-09-17 22:07:18

标签: python pyglet

如果我连续加载了两个部分透明的PNG(onDraw),如果第二张图像在该区域是透明的,我还能看到第一张图像吗?这些图像将被绘制到一个窗口中。我会使用精灵,但我无法让他们工作。谢谢!

2 个答案:

答案 0 :(得分:0)

你的问题中没有代码,坦率地说,我认为你的问题有很多解决方案,你可以在这里找到至少10个不同的答案。

我会投票结束这个问题,但看到这些是如此罕见,他们通常不会得到很多回应,无论是关闭请求还是投票都不足以让人们关心..我会给出一个示例代码片段这可能会让你走向可行的解决方案:

import pyglet
from pyglet.gl import *

class main(pyglet.window.Window):
    def __init__ (self):
        super(main, self).__init__(300, 300, fullscreen = False)
        self.alive = 1

        self.image_one = pyglet.sprite.Sprite(pyglet.image.load('./image_one.png'))
        self.image_two = pyglet.sprite.Sprite(pyglet.image.load('./image_two.png'))

        self.image_one.x = 100
        self.image_one.y = 100

        self.image_two.x = 70
        self.image_two.y = 80

    def on_draw(self):
        self.render()

    def on_close(self):
        self.alive = 0

    def render(self):
        self.clear()

        self.image_one.draw()
        self.image_two.draw()

        self.flip()

    def run(self):
        while self.alive == 1:
            self.render()

            # -----------> This is key <----------
            # This is what replaces pyglet.app.run()
            # but is required for the GUI to not freeze
            #
            event = self.dispatch_events()

x = main()
x.run()

我使用了这两张图片:

  1. enter image description here

  2. enter image description here

  3. 没什么特别的,但它会给你一个如何使用Sprite类渲染两个图像的例子。

答案 1 :(得分:0)

以下是我写的一些示例代码:

import  pyglet

window = pyglet.window.Window()
one_image = pyglet.image.load("one.png") 
two_image = pyglet.image.load("two.png") 
one = pyglet.sprite.Sprite(one_image)
two = pyglet.sprite.Sprite(two_image)


@window.event
def on_draw():
    one.x = 0
    one.y = 0
    one.draw()
    two.x = 365
    two.y = 305
    two.draw()

pyglet.app.run()

one.png和two.png是透明的,形状不一样,我能看到two.png覆盖在one.png上。

,结果为here

希望这有帮助!