| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- 2026/2/14 tianhaobu
- //注册与注销建议使用更加现代化的autoreg_handle和autodel_handle,详见2/18
- 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/18 tianhaobu
- TL;DR: 给大忙人的handleinput30秒速通
- 必修:
- autoreg_handle("A","B",C)
- 注册handle用,"A"表示这个handle函数的名字;"B"表示这个handle的注册名(小名),通常"A"="B";C表示优先级
- autodel_handle("A")
- 注销handle用,"A"表示这个handle函数的名字
- 选择性必修:
- input_handle_find("A")
- 根据注册名返回函数名,"A"表示注册名
- 通常搭配autodel_handle()使用
- 2026/2/19 tianhaobu
- 没错还是我,修复了handle input,现在直接使用_xxx = ingame.kc("X")即可,无需if(xxx != undefined)了.
|