从一个背离射击方向的移动开始你的双摇杆射击游戏。将玩家放置在即将激活的地板砖上,并在侧面放置一个目标。玩家通过一个控制指令避开危险,同时通过另一个控制指令瞄准目标。即使玩家朝不同方向移动,射击也应从新位置发出。
下方的虚构测试舱提供两次射击和一段通往出口的短途行走。在添加移动敌人或更快的控制之前,使用它来检查移动、瞄准和开火是否保持独立。

为移动、瞄准和射击设置独立的输入
使用五乘五网格。列从东向计数,编号为 0 到 4;行从南向计数,编号为 0 到 4。将技术员起始位置设为 (2, 2),生命值为 1。在 (4, 1) 放置一个固定目标,在 (1, 4) 放置另一个目标。将出口设为 (1, 0),并在两个目标全部清除前保持锁定。
在每个调试帧中采样移动方向、瞄准方向和射击输入。在此测试中,每个方向可以是中立状态或四个基本方向之一。你可以先使用两组键盘方向键来验证规则。如果添加模拟控制器,请分别映射其移动和瞄准功能,并在你打算支持的设备上验证这些输入。

| 阶段 | 应用内容 | 验证内容 |
|---|---|---|
| 移动 | 移动一个合法格子或保持不动。越界移动不会改变位置。 | 瞄准输入不能移动玩家。 |
| 瞄准和射击 | 当 Fire 处于激活状态且瞄准方向非中立时,从已解析的瓦片沿该直线追踪一发子弹,直至命中该线上的第一个存活目标或棋盘边缘。 | 子弹的发射方向独立于移动方向。中立瞄准不会产生子弹。 |
| 检查地板和出口 | 射击后,检查玩家脚下的瓦片。若位于激活瓦片上,则失败。否则,进入已解锁的出口即获胜。 | 击中目标并不能使玩家免于地板危险。 |
在瓦片 (2, 2) 上为第 1 帧使用警告标记,在瓦片 (2, 1) 上为第 2 帧使用警告标记。这两处是该练习中的危险检查点。赋予每个目标 1 点耐久度。保持此房间内无装填和敌人攻击,以便判断未命中是由瞄准还是子弹发射原点造成的。
遍历两个同时输入的射击
| 帧 | 移动、瞄准和 Fire | 预期结果 |
|---|---|---|
| 1 | 北、东、Fire 激活 | 移动到 (2, 1),避开激活瓦片。向东的子弹击中位于 (4, 1) 的机器人。 |
| 2 | 西,南,开火激活 | 移动至 (1, 1),避开第二个激活的方块。向南的射击将击中位于 (1, 4) 的机器人。出口解锁。 |
| 3 | 北,中立,开火未激活 | 到达位于 (1, 0) 的已解锁出口并获胜。 |

第一步将行从两个变为一个,因此向东的射击与第一个目标对齐。第二步将列从两个变为一个,因此向南的射击与另一个目标对齐。在这两种情况下,移动和瞄准输入必须在同一帧内生效。如果开火跟随最后一次移动方向,则两次射击都不会沿预期轨迹发射。
向 AI 请求一个竞技场和步进控制
SEELE 的 AI 游戏制作器为小型游戏提供了一个起点,可用于检查一个循环。提供确切的方块和输入规则以及视觉设置。请求一个调试视图,显示每发子弹的起始位置,以便判断未命中是由于瞄准问题还是操作顺序问题。
在一个 5 乘 5 的网格上构建一个俯视角浏览器双摇杆射击测试舱。使用 x=0–4 向东,y=0–4 向南。从 (2,2) 开始,生命值为 1。在 (4,1) 和 (1,4) 放置一击必杀的目标。将出口设置在 (1,0),在两个目标全部消灭前保持锁定。
在每个调试 tick 读取独立的移动、瞄准和开火值。移动和瞄准各自可以是中立或一个基本方向。首先应用一个合法移动步骤。忽略网格外的步骤。不要将移动方向复制到瞄准中。当开火激活且瞄准非中立时,从移动后的地块追踪一发子弹。击中该方向上的第一个存活目标,或让子弹离开棋盘。即使开火激活,中立瞄准也不会产生子弹。
射击后,检查玩家脚下的地块。地块 (2,2) 在 tick 1 激活,地块 (2,1) 在 tick 2 激活。在其检查时站在任一激活地块上会导致尝试失败。检查安全后,在解锁的出口处获胜。没有进一步的危险或目标移动。
显示移动和瞄准值、子弹的起点和终点,以及结果。添加一个单步调试控制。重启将恢复玩家、生命值、目标、出口和初始 tick。
在运行追踪之前,请单独检查输入。从一个安全的测试地块开始,保持移动为零并瞄准,确认位置保持固定。然后在移动时保持开火且瞄准中立,确认没有子弹发射。运行两个已完成的射击,然后在第一个 tick 交换移动和瞄准,以验证预期的命中消失。尝试停留在第一个激活的地块上,并检查重启是否恢复了原始目标和锁定的出口。关于分步检查 AI 游戏的指南 展示了如何在检查失败后请求针对性修复。
移动后更新预览
假设瞄准预览使用的是玩家在该 tick 开始时的地块。在 tick 1,它将从 (2, 2) 指向东方,沿着错误的一行。在 tick 2,它将从 (2, 1) 指向南方,沿着错误的一列。实际的射击已经使用目的地地块,因此即使射击正常,预览也可能不一致。
仅将预览原点更改为解析后的位置。在工作表中,旧的预览与两次射击均不匹配,而修订后的预览与两者均匹配。目标命中和危险检查保持不变。在构建版本中,在快速方向变化期间同时比较预览和射击,以决定该提示是否清晰易读。
保持第一个竞技场足够小,以便进行诊断
围绕一个同时进行的移动和射击构建房间,然后添加第二个方向对。在引入移动威胁之前,检查射线和玩家的位置。使用 SEELE 的 AI 游戏制作器开始你的双摇杆原型,并使用三帧追踪来查看控制是否保持独立。
常见问题
我应该先测试原始摇杆值还是归一化方向?
先从归一化方向开始,例如北或中立,这样你可以在任何测试设置上重复相同的输入。在添加设备适配器时检查原始摇杆值。验证它如何将中心附近的小移动转换为中立状态,而不影响另一个摇杆。
当瞄准返回中立时应该发生什么?
在这个房间中,隐藏瞄准提示,即使 Fire 处于激活状态也跳过射击。这可以提供一个明确的检查,以确认瞄准与移动是分开的。如果你希望瞄准稍后保持持续,请为其设置独立的规则,并测试玩家如何清除它。
第一次射击测试需要可见的弹道吗?
一条直线追踪足以验证射击的原点和方向。给它一条短暂的线条或命中提示,以便玩家可以看到发生了什么。如果你稍后添加飞行时间,请单独测试它,因为目标可能在射击发射后移动。
我什么时候应该添加移动威胁?
在玩家能够独立移动和瞄准,并能解释射击将采取哪个方向之后添加一个。最初让威胁只有一条可预测的路径。这使得更容易判断未命中的射击是由于移动目标造成的,还是由于控制问题造成的。


