【python】pyglet教程(二)你的第一个pyglet应用程序

一、Hello, World

毫无疑问,我们的第一个程序将从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()

1、导入pyglet

import pyglet

2、创建窗口

通过调用pyglet.window.Window的默认构造函数创建一个实例对象。窗口一经创建便将可见,并且其所有参数都有合理的默认值:

window = pyglet.window.Window()

3、窗口内容

要显示文本,我们将创建一个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()函数中,窗口将清除为默认背景色(黑色),并绘制标签。

4、调用:

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.resourceimage()功能加载图像,该图像自动根据源文件路径找到图像位置(而不是工作目录)。

要加载未与应用程序捆绑在一起的图像(例如,在命令行上指定,需要使用 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()

1、键盘

到目前为止,唯一使用的事件是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键符号的完整列表,请参见文档

2、鼠标

与键盘类似

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播放


如果觉得ok,点个赞,点个关注,也欢迎给个打赏支持一下编者的工作
发布了52 篇原创文章 · 获赞 384 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/weixin_41045354/article/details/105006796