【GameMaker】给你游戏加手柄:Input库

Input 8.0 Beta

全面跨平台输入库,适用于 GameMaker 2022 LTS,由 Juju AdamsAlynne Keith朋友们 开发

下载 .yymps 文件

Discord 服务器 上讨论 Input


Input 是一个强大且功能丰富的输入库,将键盘、鼠标和游戏手柄的控制统一在一个框架下。它处理热插拔、重绑定、手柄类型检测、玩家手柄分配、摇杆的最小/最大死区等所有功能,完全不需要你额外设置。这个库大大简化了为每个平台配置每种游戏手柄的重复性工作,加速了你的游戏开发进程。

Input 构建于与引擎无关的 SDL2 重新映射系统 之上,使用社区贡献的绑定,涵盖了所有常见的游戏手柄,甚至是你可能从未听说过的手柄。因为这个系统基于多年社区贡献,SDL2 和 Input 能够完美支持几乎所有奇异和独特的输入设备,几乎找不到 SDL2 不支持的设备。

相比 GameMaker 原生的游戏手柄实现,Input 是一个显著的改进,解决了跨平台不一致性和偶尔的致命问题。它是 GameMaker 基本游戏手柄和键盘实现的一个巨大的进步。

Input 是一个非常庞大的库!要快速上手,请查看我们的 新手指南


Input 支持哪些平台?

几乎所有平台!对于我们不定期测试的平台,你可能会遇到一些边缘情况;如果发现任何问题,请随时报告 Bug

 

Input 支持哪些版本的 GameMaker?

Input 主要支持 GameMaker LTS 2022,理论上也支持其后的所有版本。尽管后续的 GameMaker 版本可能会改变某些功能,导致 Input 无法向前兼容,但 Input 仅使用 GameMaker 原生函数,因此在长期兼容性上处于最优位置。

 

Input 的许可是什么?我能在商业项目中使用吗?

Input 采用 MIT 许可证发布。这意味着你可以将它用于任何用途,包括商业项目。如果你能在游戏的致谢名单中提到我们(“Juju Adams, Alynne Keith, and Friends”)并/或表示感谢,我们会非常感激,但你没有任何义务这么做。

 

我觉得缺少了一个有用的功能,希望你们实现它!

很棒!请提交一个功能请求。功能请求让 Input 成为一个更有趣的工具,并为我们设立了新的目标。

 

我发现了一个 Bug,这个 Bug 让我既害怕又略感烦恼。解决它的最佳方法是什么?

请提交错误报告。我们每天都会检查 GitHub,通常几天后就会发布 Bug 修复。你也可以在 Discord 服务器 上联系我们,但清晰的 Bug 报告会更有效。

 

Input 是谁开发的?

Input 主要由 JujuAlynne 开发和维护,他们已经编写和重写了多次输入系统。Juju 曾参与开发多款商业 GameMaker 游戏,Alynne 多年来一直活跃在独立开发社区。Input 是我们在担任顾问时积累的实际经验的结晶。

许多其他人在 GameMaker 的开源社区中通过错误报告和功能请求做出了贡献。没有他们的创意和耐心,Input 就不会存在。我们对他们深表感激。你可以在Input 的致谢页面中阅读相关信息。

 

我可以向你们捐款吗?你们打算启动 Patreon 吗?

感谢你想表达对我们的支持——这对我们个人而言非常重要——但幸运的是,我们已经从游戏开发中获得了稳定的收入。我们目前不打算作为创作者加入 Patreon。如果你想支持我们的工作,可以在你的游戏中提到我们,或在你喜欢的社交媒体平台上为我们点赞。

新手指南


本指南最初由社区成员 Grace 撰写。

你好!也许你听说这个插件为你提供了一些新工具可以使用。也许你已经尝试让它工作,但可能错过了一两个关键细节,导致它没能成功运行。别担心,我马上会教你如何操作。本指南假设你对 GameMaker 有一定的基础知识,不会涉及游戏具体功能的制作,而是专注于如何让输入系统开始读取你的输入。

第一步:设置

首先,你需要将获得的 .yymps 文件 拖入你的项目中。对话框弹出后,点击“添加全部”,然后点击“确定”。这会在资源浏览器中新增一个名为“Input”的文件夹。这是你需要的。

输入系统在游戏启动时会通过内部对象创建一个实例。确保不要意外销毁或停用这个实例!

第二步:动作定义

现在我们可以开始体验这个输入系统的核心功能了。接下来我们将定义一些“动作”。

动作 是你希望向玩家提供的基本输入行为;包括跳跃、射击、暂停游戏或朝某个方向移动。通过使用动作,我们可以抽象用户输入,这样在游戏运行过程中可以更换输入源,而无需修改其他部分。使用动作还可以更方便地实现按键重绑定。

接下来我们来定义一些动作!要为动作定义默认绑定,你需要编辑 __input_config_verbs() 脚本。在导入 Input 插件后,它会附带一些默认的控制设置。为了更好地说明,我们将删除 __input_config_verbs() 中的所有内容,从头开始。

我将定义三个控制动作,分别是向左、向右和射击。

return {
	// 将键盘控制绑定到动作
	keyboard_and_mouse:
	{
		left:  input_binding_key(vk_left),
		right: input_binding_key(vk_right),
		shoot: input_binding_key("A"),
	},
};

我们使用 input_binding_key() 函数接收标准 GM 输入功能的常规按键值,然后将其绑定到我们想要分配的动作(动词)上。

这是一个可以放在角色对象中的 Step 事件代码:

// 如果激活了 Left 或 Right 动作,则移动玩家
if (input_check("left"))  x -= 4;
if (input_check("right")) x += 4;

// 如果玩家按下了 "Shoot" 按钮,则发射子弹
if (input_check_pressed("shoot")) show_debug_message("bang");

如果你对标准 GML 输入函数比较熟悉,这段代码应该看起来很熟悉了。input_check() 类似于 keyboard_check(),而 input_check_pressed() 类似于 keyboard_check_pressed()

现在,运行游戏,看看你的成果!这输入系统用起来是不是很顺手?按钮是不是很有趣?

不过此时,你可能会问自己:“Grace,为什么我不直接用 keyboard_check 函数,而要这么麻烦呢?”

哦,天真可爱的孩子,你以为我们就到此为止了吗?

第三步:游戏手柄绑定

让我们回到 __input_config_verbs() 中的默认配置文件。

看看我们即将添加的新代码:

return {
    
	// 将键盘控制绑定到动作
	keyboard_and_mouse:
	{
		left:  input_binding_key(vk_left),
		right: input_binding_key(vk_right),
		shoot: input_binding_key("A"),
	},
	
	// 将游戏手柄控制绑定到动作
	gamepad:
	{
		left:  input_binding_gamepad_axis(gp_axislh, true),
		right: input_binding_gamepad_axis(gp_axislh, false),
		shoot: input_binding_gamepad_button(gp_face1),
	},
};

和键盘绑定函数类似,游戏手柄绑定函数使用标准 GM 功能中的常规游戏手柄输入值。恭喜,你现在也支持游戏手柄输入了。

输入系统默认会在游戏启动时自动扫描游戏手柄输入。如果玩家使用键盘,输入系统会切换到 keyboard_and_mouse 配置文件;如果玩家使用游戏手柄,系统会切换到 gamepad 配置文件(这些配置文件的名称可以通过修改一些宏来控制)。

第四步:后续步骤

在第二步中,我们使用了 input_check() 来在某个动作被激活时移动角色。如果使用游戏手柄,当玩家使用摇杆或触发轴时,输入可能是模拟的(即 01 之间的分数值),而不是数字的(布尔值 truefalse)。你可以使用 input_value() 获取模拟输入值。如果你想处理二维移动,可以参考 2D 检查函数

这只是 Input 系统功能的冰山一角。更多示例可以在 GitHub 主仓库 中找到,包括按键重绑定和多人游戏的示例。你还可以深入阅读文档,了解 Input 的更多功能。如果你遇到问题或想要快速得到答案,欢迎 加入我们的 Discord

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值