在这篇Python Pyglet文章中,我想展示如何向窗口添加GIF图像。一般来说,我们会讲到Pyglet中的动画。

虽然图像序列和地图集提供了相关图像的存储,但它们单独不足以描述一个完整的动画。

Animation类管理一个AnimationFrame对象列表,每个对象引用一个图像和一个持续时间(秒)。图像的存储由应用程序开发人员决定:它们可以是离散的,也可以打包成纹理图集或任何其他技术。

可以使用load_animation()从GIF 89a图像文件直接加载动画(在Linux,Mac OS X和Windows上受支持),也可以使用类方法从图像列表或图像序列中手动构建动画(在这种情况下,定时信息也将需要提供)。add_to_texture_bin()方法提供了一种方便的方法,可以将图像帧打包到纹理容器中以进行有效访问。

单个帧可以被应用程序访问用于任何类型的渲染,或者整个动画可以直接用于一个精灵(见下一节)。

下面的示例加载一个GIF动画,并将该动画中的图像打包到纹理库中。一个精灵被用来在窗口中显示动画。

下面是Python Pyglet向窗口添加GIF图像的完整代码

import pyglet

animation = pyglet.image.load_animation('linuxmi.gif')
animSprite = pyglet.sprite.Sprite(animation)

w = animSprite.width
h = animSprite.height

window = pyglet.window.Window(width=w, height=h)

r,g,b,alpha = 0.5,0.5,0.8,0.5

pyglet.gl.glClearColor(r,g,b,alpha)

@window.event
def on_draw():
    window.clear()
    animSprite.draw()

pyglet.app.run()
~

此行代码用于加载我们的gif图像,请确保已将GIF图像添加到项目目录中。

animation = pyglet.image.load_animation('linuxmi.gif')

这些代码行用于创建sprite(精灵),sprite是功能更全的类,用于在窗口中显示Images实例。虽然图像和动画实例主要关注图像数据(大小,像素等),精灵也包括额外的属性。这些包括x/y位置、比例、旋转、不透明度、色彩、可见性,以及水平和垂直缩放。多个精灵可以共享同一幅图像,给定一幅图像或动画,构造一个精灵,可以使用draw()方法直接绘制:

animSprite = pyglet.sprite.Sprite(animation)

w = animSprite.width
h = animSprite.height

这一行代码是用来创建窗口对象的,我们还提供了rgba颜色

window = pyglet.window.Window(width=w, height=h)

r,g,b,alpha = 0.5,0.5,0.8,0.5

pyglet.gl.glClearColor(r,g,b,alpha)

运行代码,你将如下结果:

发表评论

电子邮件地址不会被公开。 必填项已用*标注