本文由 FrameSprite 作者工作流整理,AI 辅助编写,引用原始技术资料;构造案例不代表模型或引擎实测。
为八方向选择保留当前朝向、死区与角度滞回,解决摇杆靠近扇区边界时不断切图。
八向朝向不能只在每帧把角度四舍五入。保存当前扇区,输入小于死区时保持;新角度越过当前扇区边界加上滞回余量后才切换。角度差必须按圆周最短距离计算。滞回用于减少抖动,不改变斜向移动速度,也不要求重新生成方向图。
声明屏幕 y 向下还是世界 y 向上,0° 对应哪个方向,以及方向 ID 的顺序。测试东、南、西、北四个向量,再加入斜向;不能直接把另一工具的数组顺序当成游戏约定。
输入长度小于声明阈值时保留最后朝向并进入待机。不要把接近零的向量求角度后当成向右,导致每次松手都转脸。阈值要在实际手柄上调,不以样本值作为标准。
八向扇区半宽为 22.5°。余量 4° 时,当前中心 0° 的朝向可保持到 ±26.5°;超过后选最近新方向。处理 359° 与 1° 时须使用圆周角度差。
录制边界附近输入,以及快速反向和慢速转圈。余量过大会让换向滞后,过小则抖动仍在。用同一批帧灵方向图观察,仅改变控制规则,避免同时换美术造成比较失真。
起始朝向中心 0°,余量 4°,输入依次 22°、24°、21°、27°。
前 3 次保持 0°;27° 超过 26.5° 后切换到 45°。
仅为选择算法样本,不证明所有控制器使用 4° 最合适。
阈值 | 输入 | 作用 |
|---|---|---|
dead zone | vector magnitude | stationary stability |
sector boundary | angle | nearest direction |
hysteresis | retained-sector angle | reduce flicker |
八向每个扇区宽 45 度,右向与右上向的普通边界为 22.5 度。若当前朝右,并设 4 度滞回,20、23、22 度三个输入都可以保持原方向,直到超过 26.5 度才切换。这个例子说明滞回与摇杆死区解决的是不同问题:死区过滤接近零的输入,滞回过滤方向边界的反复切换。先记录实际角度序列和切换次数,再调整容差;不要为了减少闪动而延迟所有攻击朝向。鼠标瞄准与移动朝向也可以采用不同策略。
滞回控制显示哪张方向图,移动仍使用原输入向量和速度规则。不要把保留的视觉方向直接当成新的移动向量,否则玩家贴边转向会被吸附到旧方向。攻击朝向是否在动作开始后锁定,应由动作规则另行决定。
本次补充由 AI 辅助整理,按公开原始技术资料核对。可下载的输入与预期结果是原创构造案例,不代表模型或引擎实测;实际项目应按步骤保留自己的验收记录。
不能,速度归一化与朝向选图是不同问题。
通常保持最后有效朝向,由游戏设计声明。
可作为另一策略,但会依赖帧率;角度余量更直接表达边界容忍。
Vector2 · Godot Engine
CharacterBody2D · Godot Engine
原文:https://cn.framesprite.com/guides/eight-way-facing-angle-hysteresis
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。