浏览代码

+ handleinput的说明性文本

tianhaobu 3 月之前
父节点
当前提交
a663e8218a
共有 1 个文件被更改,包括 26 次插入0 次删除
  1. 26 0
      notes/必读(更新日志)/必读(更新日志).txt

+ 26 - 0
notes/必读(更新日志)/必读(更新日志).txt

@@ -71,6 +71,32 @@ gml内部会计算image_index += sprite_fps / game_fps * image_speed等等公式
 
 11. 有个写了一半的oEnemyFlying, 先不要动
 
+
+2026/2/14 tianhaobu
+1. 引入了新的输入方法,相关函数在interaction.gml里,大致逻辑是这样的:
+在监听任何按键前,需要先注册一个句柄(handle)
+{句柄外部名称} = new input_handle("{句柄内部名称}",{优先级})
+句柄外部名称是调用该句柄的名称,句柄内部名称建议与外部名称保持一致.
+优先级描述了该句柄的优先使用程度,通常来说,''高优先级句柄独占所有的输入''(例外是 debug 句柄).
+意味着若存在优先级10的句柄foo与优先级为1的句柄bar,基于bar的任何按键监听都是无效的,句柄foo独占整个输入.
+
+监听按键时,需要使用如下格式
+{句柄外部名称}.kc({按键}) | {句柄外部名称}.kcr({按键}) | {句柄外部名称}.kcp({按键})
+假设为存在foo = foo_A.kc("A"); bar_A = bar.kc("A"); foo_B = bar.kc("B"); bar_B = bar.kc("B")
+如果只有按键A被按下: 则foo_A = true; foo_B = false; bar_A = false; bar_B = false
+如果按键A、B被按下: 则foo_A = true; foo_B = true; bar_A = false; bar_B = false
+
+此外,现对优先级进行简单的设定: 游戏内部的输入(上下左右跳etc): 1;debug: -1
+其中,debug不参与优先级竞争,即debug句柄无论何时都被激活,同时不影响当前最高级句柄,因此任何时候都有两个激活的句柄.
+
+为了防止潜在的bug,该系统存在一个消费系统,任何一个按键被按下都会使这个按键被"消费",即该按键会被视作没被按下.
+
+一些简单的约定:
+1) 不要让debug句柄和其他句柄同时监听一个按键.
+2) 所有输入都尽量放在oInput里.
+3) _handle_init()放在begin_step里.
+
+语言能力极差... 看不懂的可以参考oInput
 2026/2/15 Dr.Duck
 
 1. 优化check_hazard逻辑,功能实现没问题但不够优雅