【Godot】关于游戏手柄输入

(原文写于2021年国庆左右)
现在主流的游戏手柄分为任天堂、XBOX和SONY三种。三种游戏手柄键位名称和布局不一样,在Godot对应的常数名和值也不一样。
我一直以来都是PC玩家,成为Steam玩家也就两年左右,没有任何游戏主机和掌机。所以对游戏手柄也是个门外汉。2021年国庆左右购买了一款北通的宙斯手柄,这是一款与XBOX手柄键位一致的手柄。
买它的原因一个是拿来玩一些Steam上支持手柄的一些游戏,还有一个原因当然就是拿来研究Godot。

手柄是U口连接,有专用设置程序,这些都不讲了,简单讲一下在Godot中的一些测试和总结。

游戏手柄是否过时?

现在可能手机游戏的用户比较庞大,但是笔者偏偏是个不喜欢手游的人,并且坚信有些游戏就适合鼠标键盘玩,比如模拟经营类,而另一些非常适合游戏手柄玩,比如横版类和2D俯视角、2.5D动作类。
电脑+手柄其实是一个非常好的游戏娱乐组合,比键盘鼠标有趣,比触摸屏搓玻璃更优雅。

基础测试

因为Godot的官方文档没有涉及手柄的内容,API里面也是语焉不详,所以好的办法就是自己测试和总结。下面就是我当时首先写的测试代码,用于输出手柄按键对应的button_index和两个摇杆所谓“轴”和“轴上的值”。

func _input(event):
	# 输出手柄按键对应的常量值
	if event is InputEventJoypadButton and event.is_pressed():
		print(event.button_index)
	# 输出按键的轴和压力值
	if event is InputEventJoypadMotion:
		print("轴:",event.axis,"压力",event.axis_value)

以上代码会在场景运行后,自动检测并输出手柄按键对应的button_index值(枚举常量),以及两个摇杆的横向轴和纵向对应的button_index值(枚举常量)以及两个轴向的按压值或叫偏移量。
其中:

  • InputEventJoypadButton对应手柄上的非摇杆按键的按下与松开等事件;
  • InputEventJoypadMotion对应检测手柄上两个摇杆的按压与反馈。

经过上述检测以及对应查看JoystickList枚举的值,总结XBOX类型手柄键位以及轴的对应的JoystickList枚举或的常量名如下:
Godot中类Xbox手柄键位与轴名称示意图
也是就下表

JoystickList枚举常量对应数值说明
JOY_AXIS_00游戏手柄左摇杆水平轴
JOY_AXIS_11游戏手柄左摇杆垂直轴
JOY_AXIS_22游戏手柄右摇杆水平轴
JOY_AXIS_33游戏手柄右摇杆垂直轴
JOY_DPAD_UP12游戏手柄上方向键
JOY_DPAD_DOWN13游戏手柄下方向键
JOY_DPAD_LEFT14游戏手柄左方向键
JOY_DPAD_RIGHT15游戏手柄右方向键
JOY_XBOX_A0Xbox 游戏手柄A
JOY_XBOX_B1Xbox 游戏手柄B
JOY_XBOX_X2Xbox 游戏手柄X
JOY_XBOX_Y3Xbox 游戏手柄Y
JOY_L4游戏手柄左肩键
JOY_L26游戏手柄左扳机键
JOY_R5游戏手柄右肩键
JOY_R27游戏手柄的右扳机键

键位的意义

以上面的类XBOX手柄为例:
在很多游戏中对同一种手柄按键通常赋予不同的作用,但是又有一些约定俗成的类似设置。比如A键确认,B键返回,X键主技能,Y副技能。或者A是跳跃,B是冲刺等。
另外3D游戏中,左上角的摇杆控制移动,右下角摇杆控制视角等。
现在的游戏手柄还有左右共四个肩键,可以实现与更多键盘或鼠标按键功能的对应。

Godot中利用手柄摇杆和十字键分别进行简单的八向运动控制

extends Sprite

var dir = Vector2.ZERO # 方向向量
var dp = 5 # 单次移动距离


func _process(delta):
	dir = Vector2.ZERO
	# 手柄十字键控制上下左右移动
	if Input.is_joy_button_pressed(0,JOY_DPAD_LEFT):
		dir.x = -1
	if Input.is_joy_button_pressed(0,JOY_DPAD_RIGHT):
		dir.x = 1
	if Input.is_joy_button_pressed(0,JOY_DPAD_UP):
		dir.y = -1
	if Input.is_joy_button_pressed(0,JOY_DPAD_DOWN):
		dir.y = 1

	position += dir * dp

	# 手柄左上角摇杆控制移动
	dir.x = Input.get_joy_axis(0,JOY_AXIS_0)
	dir.y = Input.get_joy_axis(0,JOY_AXIS_1)
	position += dir * dp

其他的使用方式,你可以自行探索一下,这篇只作为是抛转引玉。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Godot是一款免费开源的游戏引擎,它具有跨平台、易用性强、可定制、功能丰富等特点,可以用于开发2D和3D游戏。近年来,Godot引擎用户数量逐渐上升,越来越多的游戏开发者把它作为首选引擎之一。 而微信小游戏则是微信推出的一种全新小程序类型,玩家可以在微信内直接玩游戏,无需下载程序包,极大地节省了下载和安装时间,同时也打破了应用商店的门槛,让更多的开发者和用户可以轻松地参与其中。 目前,Godot引擎也支持微信小游戏的开发,游戏开发者可以将自己的Godot游戏导出为微信小游戏,方便在微信平台上发布和推广游戏。 有了Godot引擎的强大功能和微信小游戏平台的广泛覆盖,开发小游戏成为了更加容易且富有创造性的活动。同时,更多的用户可以获得更高质量的游戏体验。 因此,使用Godot引擎制作微信小游戏是一种非常值得尝试的方式,无论是对于开发者还是用户来说,都有着很大的意义。 ### 回答2: Godot是一款开源的游戏引擎,具有跨平台、高效、易用等特点,近年来备受关注。近期,Godot引擎在2020年底发布的3.2.4版本中,新增了支持微信小游戏的功能。这对于Godot引擎的用户们来说是一个不错的选择。 Godot引擎的开发者们针对微信小游戏做了很多优化,例如支持更高的屏幕分辨率、使用微信API等。它提供了一些自有的API,可以方便地与微信小游戏进行交互。同时,Godot引擎还支持JavaScript语言,这对于JavaScript开发者来说,使用Godot引擎来制作微信小游戏是一个不错的选择。 Godot引擎的开发者们还提供了一些模板,让开发者能够快速地开始制作微信小游戏。开发者可以去Godot引擎的官网上获取这些模板,也可以通过Godot社区轻松地找到相关资源。 当然, Godot引擎也有一些缺点。例如,由于Godot引擎的使用较为复杂,需要较长的学习时间,对于初学者来说不太友好。此外,虽然Godot引擎提供了一些自有的API,但也不能完全满足开发者的需求。 总的来说,Godot引擎在支持微信小游戏方面做得比较不错。如果你是一名有经验的开发者或者对学习新技术有很强兴趣的人,Godot引擎值得一试。 ### 回答3: Godot是一款流行的开源游戏引擎,由于其多平台、易学易用且强大的功能,已经受到了全球游戏开发者的青睐。微信小游戏则是微信推出的一款在线游戏平台,通过微信即可轻松玩游戏并与好友互动。 Godot适合用来开发不同类型的游戏,包括2D、3D 游戏、RPG、模拟器等。通过结合微信小游戏平台,Godot可以更加便捷地开发出适合微信小游戏游戏。 对于开发者而言,Godot支持多语言编写,如C++、python等,可以更加方便快捷地进行游戏编写。此外,Godot还支持良好的版本控制,可以方便地管理不同的代码版本。 在安装Godot时,需要注意选择微信小游戏的插件,这将会在Godot中添加微信开放平台进行开发微信小游戏所需的API接口。开发过程中,开发者可以在PC上进行开发,并在发布时选择微信小游戏平台,这将会生成适合微信小游戏游戏包。 总而言之,Godot与微信小游戏的结合可以让游戏开发者更加方便地在微信小游戏平台上发布自己的游戏作品。开发者可以利用Godot的强大功能,更加方便地开发出适合于微信小游戏平台的游戏。而对于游戏玩家而言,这也意味着可以玩到更多便捷、优秀的微信小游戏

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

巽星石

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值