对于输入处理我们通常会见到下面三种写法:
我们可以看到_input()、Input以及event,正确区别三者以及在正确的时候选择使用它们是学好Godot输入处理的基础Input是GDS的全局对象之一_input是Node的虚函数之一event是_input返回的参数,其类型是InputEventInputEvent是输入事件的基类,继承自Resource,其下还有派生和细分了一系列以InputEvent名称开头的输入事件类型
Input与InputEvent属性和方法对比
- Input与InputEvent的属性和方法集是不同的
- 通过比较,它们只有is_action_pressed一个方法是有交集的,而且两者的参数个数还不一样
- InputEvent背后还有一大串具体的输入事件类型,可以通过is关键字进行筛选处理,具体的事件类型又有自己的成员变量和方法
- Input更像是封装了各种输入设备以及与InputMap相关的方法,让我们调用起来更容易
所以单单一个输入处理,Godot就要我们学习和掌握将近10个类,以及几十个成员变量和方法,所以这部分是值得深入研究的
Input常用方法
有关于物理按键
InputEvent的详细类型
完整检测Shift+K按下与松开
一个经典的event参数细分判断和if嵌套结构
extends Control
onready var lab $Label
func_input(event):
if event is InputEventWithModifiers:#是具有alt、command、control、meta、shift修饰符的事件
if event.shift:shift
if event is InputEventKey:#是键盘事件
if event.scancode==KEY_K:#键盘按键是K
if event.is_pressed():#按键按下
Lab_show("按下:shift+K")
else:#按键松开
Lab_show("松开:shift+K")
func lab_show(txt:String)-void:
lab.text txt