毫无疑问,我们的第一个程序将从Hello, World开始。该程序将打开一个包含一些文本的窗口,然后等待关闭。
在examples / programming_guide / hello_world.py文件中找到整个程序。
先放出完整代码
import pyglet
window = pyglet.window.Window()
label = pyglet.text.Label('Hello, world',
font_name='Times New Roman',
font_size=36,
x=window.width//2, y=window.height//2,
anchor_x='center', anchor_y='center')
@window.event
def on_draw():
window.clear()
label.draw()
pyglet.app.run()
pyglet
包import pyglet
通过调用pyglet.window.Window
的默认构造函数创建一个实例对象。窗口一经创建便将可见,并且其所有参数都有合理的默认值:
window = pyglet.window.Window()
要显示文本,我们将创建一个Label。参数用于设置标签的字体,位置和锚点:
label = pyglet.text.Label('Hello, world',
font_name='Times New Roman',
font_size=36,
x=window.width//2, y=window.height//2,
anchor_x='center', anchor_y='center')
on_draw()函数用于编辑窗口内容。pyglet提供了几种将事件处理程序附加到对象的方法;一种简单的方法是使用装饰器:
@window.event
def on_draw():
window.clear()
label.draw()
在以上on_draw()函数中,窗口将清除为默认背景色(黑色),并绘制标签。
pyglet.app.run()
进入pyglet的默认事件循环,并让pyglet响应应用程序事件,例如鼠标和键盘。现在将根据需要调用事件处理程序,并且run()仅当所有应用程序窗口都关闭时该 方法才返回。
如果正确无误的话应该会出现以下画面
大多数游戏和应用程序都需要在屏幕上加载并显示图像。在此示例中,我们将从应用程序的目录中加载图像并将其显示在窗口中:
import pyglet
window = pyglet.window.Window()
image = pyglet.resource.image('kitten.png')
@window.event
def on_draw():
window.clear()
image.blit(0, 0)
pyglet.app.run()
我们使用pyglet.resource
的image()
功能加载图像,该图像自动根据源文件路径找到图像位置(而不是工作目录)。
要加载未与应用程序捆绑在一起的图像(例如,在命令行上指定,需要使用 pyglet.image.load()
)。
blit()
方法用于绘制图像。参数(0, 0)
告诉pyglet在窗口(左下角)的像素坐标0、0处绘制图像。
import pyglet
from pyglet.window import mouse
window = pyglet.window.Window()
@window.event
def on_key_press(symbol, modifiers):
print('A key was pressed')
@window.event
def on_mouse_press(x, y, button, modifiers):
if button == mouse.LEFT:
print('The left mouse button was pressed.')
@window.event
def on_draw():
window.clear()
pyglet.app.run()
到目前为止,唯一使用的事件是on_draw()
事件。为了对键盘和鼠标事件做出反应,还必须为这些事件编写并附加事件处理程序:
import pyglet
window = pyglet.window.Window()
@window.event
def on_key_press(symbol, modifiers):
print('A key was pressed')
@window.event
def on_draw():
window.clear()
pyglet.app.run()
键盘事件有两个参数:按下的虚拟键符号以及存在的所有修饰符(例如CTRL和SHIFT键)的按位组合。
关键符号定义在pyglet.window.key
:
from pyglet.window import key
@window.event
def on_key_press(symbol, modifiers):
if symbol == key.A:
print('The "A" key was pressed.')
elif symbol == key.LEFT:
print('The left arrow key was pressed.')
elif symbol == key.ENTER:
print('The enter key was pressed.')
有关pyglet.window.key
键符号的完整列表,请参见文档
与键盘类似
from pyglet.window import mouse
@window.event
def on_mouse_press(x, y, button, modifiers):
if button == mouse.LEFT:
print('The left mouse button was pressed.')
x和y参数给出鼠标时被按下的按钮相对于窗口的左下角的位置。
窗口上可以处理20多种事件类型。查找所需事件名称和参数的简单方法是在程序中添加以下行:
event_logger = pyglet.window.event.WindowEventLogger()
window.push_handlers(event_logger)
pyglet可以轻松播放多种声音并将其混合在一起。播放一个MP3文件的示例:
import pyglet
music = pyglet.resource.media('music.mp3')
music.play()
pyglet.app.run()
与前面介绍的图像加载示例一样, media()根据路径,在应用程序的目录中查找声音文件。如果知道文件系统路径(相对或绝对路径),请使用pyglet.media.load()。
默认情况下,播放时会流式传输音频。这对于较长的音乐曲目效果很好。短音,例如游戏中使用的枪声,应在使用前在内存中完全解码。这样一来,即时行更强,CPU性能损失更少。它还允许重复播放相同的声音而无需重新加载。在这种情况下,指定streaming=False
:
sound = pyglet.resource.media('shot.wav', streaming=False)
sound.play()
更多详细示例请在源文件中查看以下示例代码
examples/media_player.py
:演示如何使用pyglet流式音频和视频的重放
examples/noisy/noisy.py
:演示同时播放许多短的音频样本,如在游戏
MP3和其他压缩音频格式要求安装FFmpeg。未压缩的WAV文件可以不使用FFmpeg播放