更新日志tianhaobu.txt 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. 2026/2/14 tianhaobu
  2. //注册与注销建议使用更加现代化的autoreg_handle和autodel_handle,详见2/18
  3. 1. 引入了新的输入方法,相关函数在interaction.gml里,大致逻辑是这样的:
  4. 在监听任何按键前,需要先注册一个句柄(handle)
  5. {句柄函数名} = new input_handle("{句柄注册名}",{优先级})
  6. 句柄外部名称是调用该句柄的名称,句柄内部名称建议与外部名称保持一致.
  7. 优先级描述了该句柄的优先使用程度,通常来说,''高优先级句柄独占所有的输入''(例外是 debug 句柄).
  8. 意味着若存在优先级10的句柄foo与优先级为1的句柄bar,基于bar的任何按键监听都是无效的,句柄foo独占整个输入.
  9. 监听按键时,需要使用如下格式
  10. {句柄函数名}.kc({按键}) | {句柄函数名}.kcr({按键}) | {句柄函数名}.kcp({按键})
  11. 假设为存在foo = foo_A.kc("A"); bar_A = bar.kc("A"); foo_B = bar.kc("B"); bar_B = bar.kc("B")
  12. 如果只有按键A被按下: 则foo_A = true; foo_B = false; bar_A = false; bar_B = false
  13. 如果按键A、B被按下: 则foo_A = true; foo_B = true; bar_A = false; bar_B = false
  14. 此外,现对优先级进行简单的设定: 游戏内部的输入(上下左右跳etc): 1;debug: -1
  15. 其中,debug不参与优先级竞争,即debug句柄无论何时都被激活,同时不影响当前最高级句柄,因此任何时候都有两个激活的句柄.
  16. 为了防止潜在的bug,该系统存在一个消费系统,任何一个按键被按下都会使这个按键被"消费",即该按键会被视作没被按下.
  17. 一些简单的约定:
  18. 1) 不要让debug句柄和其他句柄同时监听一个按键.
  19. 2) 所有输入都尽量放在oInput里.
  20. 3) _handle_init()放在begin_step里.
  21. 语言能力极差... 看不懂的可以参考oInput
  22. 2026/2/18 tianhaobu
  23. TL;DR: 给大忙人的handleinput30秒速通
  24. 必修:
  25. autoreg_handle("A","B",C)
  26. 注册handle用,"A"表示这个handle函数的名字;"B"表示这个handle的注册名(小名),通常"A"="B";C表示优先级
  27. autodel_handle("A")
  28. 注销handle用,"A"表示这个handle函数的名字
  29. 选择性必修:
  30. input_handle_find("A")
  31. 根据注册名返回函数名,"A"表示注册名
  32. 通常搭配autodel_handle()使用
  33. 2026/2/19 tianhaobu
  34. 没错还是我,修复了handle input,现在直接使用_xxx = ingame.kc("X")即可,无需if(xxx != undefined)了.