对于输入处理我们通常会见到下面三种写法:
image.png
我们可以看到_input()、Input以及event,正确区别三者以及在正确的时候选择使用它们是学好Godot输入处理的基础Input是GDS的全局对象之一_input是Node的虚函数之一event是_input返回的参数,其类型是InputEventInputEvent是输入事件的基类,继承自Resource,其下还有派生和细分了一系列以InputEvent名称开头的输入事件类型
image.png
image.png
image.png

Input与InputEvent属性和方法对比

image.png

  • Input与InputEvent的属性和方法集是不同的
  • 通过比较,它们只有is_action_pressed一个方法是有交集的,而且两者的参数个数还不一样
  • InputEvent背后还有一大串具体的输入事件类型,可以通过is关键字进行筛选处理,具体的事件类型又有自己的成员变量和方法
  • Input更像是封装了各种输入设备以及与InputMap相关的方法,让我们调用起来更容易

所以单单一个输入处理,Godot就要我们学习和掌握将近10个类,以及几十个成员变量和方法,所以这部分是值得深入研究的
image.png

Input常用方法

循序渐进:初期需要了解的14个方法
image.png

有关于物理按键

image.png

InputEvent的详细类型

image.png

完整检测Shift+K按下与松开

一个经典的event参数细分判断和if嵌套结构
image.png

  1. extends Control
  2. onready var lab $Label
  3. func_input(event):
  4. if event is InputEventWithModifiers:#是具有altcommandcontrolmetashift修饰符的事件
  5. if event.shift:shift
  6. if event is InputEventKey:#是键盘事件
  7. if event.scancode==KEY_K:#键盘按键是K
  8. if event.is_pressed():#按键按下
  9. Lab_show("按下:shift+K")
  10. else:#按键松开
  11. Lab_show("松开:shift+K")
  12. func lab_show(txt:String)-void:
  13. lab.text txt

又臭又长屎一样的输入处理代码

全额我去饿我去饿.png

InputMap