pyglet.input
支持操纵杆、游戏控制器、平板电脑和USB HID设备。
除了提供的常规鼠标和键盘支持外,此模块还为几乎所有输入设备提供统一接口 Window
。在最低层, get_devices()
可用于检索所有支持的设备的列表,包括操纵杆、平板电脑、游戏控制器、轮子、踏板、遥控器、键盘和鼠标。 返回的设备集根据操作系统(当然还有插入的设备)的不同而有很大差异。
在这个级别上,pyglet不会尝试解释 what 一个特定的设备仅仅是它提供的控制。一个 Control
可以是一个按钮,其值为 True
或 False
,或者值为浮点型的相对轴或绝对值轴。有时可以提供控件的名称(例如, x
表示操纵杆的水平轴),但通常不是。在这些情况下,设备API可能仍然有用--必须要求用户依次按下每个按钮或分别移动每个轴以识别它们。
为操纵杆、游戏控制器、平板电脑和苹果遥控器提供了更高级别的界面。这些设备通常可以由pyglet肯定地识别,并且每个设备的基本功能级别通过公共接口提供。
要使用输入设备,请执行以下操作:
打电话
get_devices()
,get_apple_remote()
,get_controllers()
或get_joysticks()
以检索和识别设备。对于低级设备(由检索
get_devices()
),查询控件的设备列表并确定您感兴趣的控件。对于高级接口,控件集由接口提供。可以选择将事件处理程序附加到设备上的控件。对于高级别接口,可以使用其他事件。
打电话
Device.open()
开始在设备上接收事件。您可以在此时间之后开始查询控制值;它们将被异步更新。打电话
Device.close()
当您使用完设备时(如果您的应用程序此时退出,则不需要)。
要使用平板电脑,请按照上述步骤使用 get_tablets()
,但请注意,没有可用的控制列表;相反,调用 Tablet.open()
返回一个 TabletCanvas
您应该在其上设置事件处理程序。
对于游戏控制器, ControllerManager
是可用的。这提供了一种方便的方式来处理控制器的热插拔。
Added in version 1.2.
班级
- class ControllerManager
用于管理游戏控制器的高级界面。
此类提供了一种方便的方法来处理设备的连接和断开。所有已连接控制器的列表可以随时使用 get_controllers 方法。对于热插拔,事件被调度到 on_connect 和 on_disconnect 。要使用ControllerManager,首先创建一个实例::
controller_man = pyglet.input.ControllerManager()
在游戏开始时,查询所有已连接的控制器:
controllers = controller_man.get_controllers()
要处理在游戏开始后连接或断开的控制器,请注册相应事件的处理程序:
@controller_man.event def on_connect(controller): # code to handle newly connected # (or re-connected) controllers controller.open() print("Connect:", controller) @controller_man.event def on_disconnect(controller): # code to handle disconnected Controller print("Disconnect:", controller)
Added in version 1.2.
方法
- get_controllers() list[Controller]
获取所有已连接控制器的列表
- 返回类型:
事件
- on_connect(controller) Controller
已连接控制器。如果这是正在重新连接的先前断开的控制器,则将返回相同的控制器实例。
- 返回类型:
- on_disconnect(controller) Controller
控制器已断开连接。
- 返回类型:
- __init__()
- __new__(**kwargs)
- class Device
基类:
object
低级输入设备。
- get_guid() str
获取SDL2格式的设备GUID。
返回包含唯一设备标识字符串的字符串。这是从硬件标识符中生成的,其格式与SDL2推广的格式相同。GUID因平台而异,但通常为32个十六进制字符。
- 返回类型:
- open( ) None
打开设备以开始接收来自它的输入。
- 参数:
- 抛出:
DeviceOpenException -- 如果设备无法在独占模式下打开,通常 由于由另一个应用程序独家打开。
- 返回类型:
- class Control
-
由设备提供的单值输入。
当设备打开时,可以查询控件的值。可以将事件处理程序附加到要在值更改时调用的控件。
这个
min
和max
属性按设备公布的方式提供;在某些情况下,控件的值将超出此范围。事件
属性
- value
控件的当前值。
该值的范围取决于设备;对于绝对控件,该范围由
min
和max
(但是,该值可能超过此范围);对于相对控件,范围未定义。
- __init__( )
创建一个控件来接收输入。
- __new__(**kwargs)
- class AbsoluteAxis
基类:
Control
一个轴,其值代表设备的当前测量值。
这种类型的轴用于具有最小和最大位置的控件。该值介于
min
和max
。- __init__( )
创建一个控件来接收输入。
- class Button
基类:
Control
值为布尔值的控件。
事件
- on_press()
按钮被按下了。
- on_release()
按钮被松开了。
属性
- value
- __init__( )
创建一个控件来接收输入。
- __new__(**kwargs)
- class Controller
-
游戏控制器的高级界面。
与操纵杆不同,控制器有一组严格定义的输入,与流行的家庭视频游戏机控制器的布局相匹配。这包括各种面部和肩部按钮、模拟杆和触发器、方向垫以及可选的隆隆声(力反馈)效果。
要使用控制器,您必须首先调用
open
.然后,只要输入发生变化,控制器就会调度各种事件。还可以随时手动对其进行民意调查,以查找任何输入的当前值。模拟棒输入被标准化到范围 [-1.0, 1.0] ,并将触发器标准化到范围 [0.0, 1.0] .所有其他输入都是数字的。注意:需要运行的应用程序事件循环
- 调度以下事件类型:
on_button_press on_button_release on_stick_motion on_dpad_motion on_trigger_motion
方法
事件
- on_stick_motion(
- controller: Controller,
- stick: str,
- xvalue: float,
- yvalue: float,
控制器模拟棒的值发生了变化。
- 参数:
controller (
Controller
) -- 模拟操纵杆发生变化的控制器。stick (
str
) -- 更改后的棒子的名称。xvalue (
float
) -- 当前X轴值,规格化为 [-1, 1] 。yvalue (
float
) -- 当前Y轴值,规格化为 [-1, 1] 。
- on_dpad_motion(
- controller: Controller,
- dpleft: bool,
- dpright: bool,
- dpup: bool,
- dpdown: bool,
控制器的方向垫发生了变化。
- 参数:
controller (
Controller
) -- 其HAT控件已更改的控制器。dpleft (
bool
) -- 如果在方向垫上按下Left,则为True。dpright (
bool
) -- 如果在方向垫上按下Right,则为True。dpup (
bool
) -- 如果在方向垫上按Up,则为True。dpdown (
bool
) -- 如果方向垫上按下了Down,则为True。
- on_trigger_motion(
- controller: Controller,
- trigger: str,
- value: float,
控制器模拟棒的值发生了变化。
- 参数:
controller (
Controller
) -- 模拟操纵杆发生变化的控制器。trigger (
str
) -- 更改的触发器的名称。value (
float
) -- 触发器的当前值,规范化为 [0, 1] 。
- on_button_press(controller: Controller, button: str)
按下了控制器上的按钮。
- 参数:
controller (
Controller
) -- 按钮被按下的控制器。button (
str
) -- 按下的按钮的名称。
- on_button_release(controller: Controller, button: str)
操纵杆上的一个按钮被释放了。
- 参数:
controller (
Controller
) -- 按钮被释放的控制器。button (
str
) -- 释放的按钮的名称。
- __new__(**kwargs)
- class Joystick
-
操纵杆类设备的高级接口。这包括各种各样的模拟和数字操纵杆、游戏手柄、控制器,甚至可能还有方向盘和其他输入设备。不幸的是,没有简单的方法来区分这些不同的设备类型中的大多数。
有关操纵杆的简化子集,请参阅
Controller
界面。它涵盖了各种流行的游戏机控制器。与操纵杆不同,控制器有严格定义的布局和输入。要使用操纵杆,请先拨打 open ,然后在您的游戏循环中检查 x , y 以此类推。这些值被归一化为范围 [-1.0, 1.0] 。
要在轴值更改时接收事件,请将on_joyaxis_motion事件处理程序附加到操纵杆。的
Joystick
实例、轴名称和当前值作为参数传递给此事件。要处理按钮事件,您应该将on_joybutton_press和on_joy_button_release事件处理程序附加到操纵杆。两者
Joystick
实例和已更改按钮的索引作为参数传递给这些事件。或者,您可以将事件处理程序附加到 button_controls 接收On_Press或On_Release事件。
要使用帽子开关,请将on_joyhat_motion事件处理程序连接到操纵杆。每当帽子开关的值发生变化时,处理程序将同时使用hat_x和hat_y值调用。
可以查询设备名称以获得操纵杆的名称。
方法
事件
- on_joyaxis_motion( )
操纵杆轴的值已更改。
- on_joyhat_motion( )
操纵杆帽子开关的值已更改。
- __init__(device)
- __new__(**kwargs)
- class AppleRemote
-
苹果遥控器的高级界面。
该界面提供对遥控器上的6个按钮控件的访问。按下并按住遥控器上的某些按钮被解释为单独的控件。
方法
- close()
关闭设备。看见 Device.close 。
事件
- on_button_press(button: str)
遥控器上的一个按钮被按下了。
当第一次按下按钮时,只有‘向上’和‘向下’按钮才会生成事件。遥控器上的所有其他按钮将等待该按钮被释放,然后同时发送按下和释放事件。
- 参数:
button (
str
) -- 按下的按钮的名称。有效名称为‘UP’、‘DOWN’、‘LEFT’、‘RIGHT’、‘LEFT_HOLD’、‘RIGHT_HOLD’、‘MENU’、‘MENU_HOLD’、‘SELECT’和‘SELECT_HOLD’
- on_button_release(button: str)
遥控器上的一个按钮被释放了。
无论用户是否已释放按钮,都会在相应的按下事件之后立即发送‘SELECT_HOLD’和‘MENU_HOLD’按钮释放事件。
- 参数:
button (
str
) -- 释放的按钮的名称。有效名称为‘UP’、‘DOWN’、‘LEFT’、‘RIGHT’、‘LEFT_HOLD’、‘RIGHT_HOLD’、‘MENU’、‘MENU_HOLD’、‘SELECT’和‘SELECT_HOLD’
- __init__(device)
- __new__(**kwargs)
功能
- get_apple_remote(display: None | Display = None) AppleRemote | None
获取Apple远程控制设备(如果存在)。
Apple Remote是最新款苹果台式机和笔记本电脑附带的白色6键小遥控器。这款遥控器只能在Mac OS X上使用。
- 参数:
- 返回类型:
- get_controllers( ) list[Controller]
获取已连接控制器的列表。
例外情况
- class DeviceException
- class DeviceOpenException
- class DeviceExclusiveException