用户输入事件

作为一个游戏框架,能够与用户进行交互是必须具备的,pyglet提供了比较基础的键盘响应事件和鼠标响应事件来捕获用户的输入。这两种事件都需要在相应的Window对象上声明,即使用@window.event修饰。

游戏一般的处理流程,都是“捕获用户输入\(\rightarrow\)修改数据状态\(\rightarrow\)重新绘制画面”,所以捕获用户输入是一个游戏的开始步骤。

键盘事件

键盘事件是通过on_key_press()on_key_release()两个函数来响应的,这两个函数都接受相同的参数,一个是symbol,表示按下的键,另一个是modifiers,表示按下的修饰按键,例如Shift、Ctrl等。

所有的按键的键值都定义在pyglet.window.key模块中,可以通过key.Wkey.DOWN等来使用,具体按键的列表可以在pyglet文档中寻找。

鼠标事件

鼠标的事件就比键盘要多一些了,虽然鼠标的按键少,但是鼠标可以做出的动作较多。鼠标事件不一定只能绑定在Window对象上,也可以绑定在后面章节中提到的文字、图片等对象上,但是事件响应函数名称都是一致的。

on_mouse_motion(x, y, dx, dy)用于捕获鼠标的每次移动,其中,x和y表示鼠标本次移动的起点坐标,dx和dy分别表示鼠标在x轴和y轴上的移动距离。

on_mouse_press(x, y, buttons, modifiers)on_mouse_release(x, y, buttons, modifiers)用于捕获鼠标按键的按下和释放动作,鼠标按钮的值与键盘键值一样都定义在pyglet.window.mouse模块中。

on_mouse_drag(x, y, dx, dy, buttons, modifiers)是用来捕获鼠标按钮按住时的拖拽动作的,其参数含义与之前的函数中同名参数相同。

对于窗口来说,还有鼠标移入和移出两个事件,分别是使用on_key_enter(x, y)on_key_leave(x, y),要注意的是,on_key_leave(x, y)返回的坐标是在窗口之外的。

鼠标的另一个操作就是滚轮操作,滚轮事件是通过on_mouse_scroll(x, y, scroll_x, scroll_y)来响应的。其中,scroll_xscroll_y给出的是是滚轮滚动计数,而不是像素距离。