用户输入事件
作为一个游戏框架,能够与用户进行交互是必须具备的,pyglet提供了比较基础的键盘响应事件和鼠标响应事件来捕获用户的输入。这两种事件都需要在相应的Window对象上声明,即使用@window.event
修饰。
游戏一般的处理流程,都是“捕获用户输入\(\rightarrow\)修改数据状态\(\rightarrow\)重新绘制画面”,所以捕获用户输入是一个游戏的开始步骤。
键盘事件
键盘事件是通过on_key_press()
和on_key_release()
两个函数来响应的,这两个函数都接受相同的参数,一个是symbol
,表示按下的键,另一个是modifiers
,表示按下的修饰按键,例如Shift、Ctrl等。
所有的按键的键值都定义在pyglet.window.key
模块中,可以通过key.W
、key.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_x
和scroll_y
给出的是是滚轮滚动计数,而不是像素距离。