来源
本例中的代码来自UP主@nearron的SetKey类相关视频。
视频地址:https://www.bilibili.com/video/BV13U4y1U7W3?spm_id_from=333.999.0.0
源码
extends Nodevar keyMapData:Dictionary ={}# 初始化,用代码快速创建Action和按键func init():add_keymap("上","1")add_keymap("上",[KEY_W])#add_keymap("下",[KEY_s])#add_keymap("左",[KEY_A])#add_keymap("右",[KEY_D])# 添加一个Action,并设置一个或多个按键# @param action 要新建的动作的名称# @param keyList 一个或多个按键# 单个按键可传入单个按键常数# 多个按键可传入包含多个按键常数的数组func add_keymap(action:String,keyList):#新增一个相应字典,并为其添一个加初始按键if !keyMapData.get(action):InputMap.add_action(action,0.8)if typeof(keyList)=TYPE_ARRAY:append_keys(action,keyList)elif typeof(keyList)=TYPE_INT:append_key(action,keyList)else:print("输入类型错误\n",typeof(keyList),"并不是所需要的值")# 检测InputMap中是否已经存在指定的Action# 如果存在同名Action,删除原来的Action# 否则直接添加Actionfunc init_keymap(action:String,keylist:Array)var actionList = InputMap.get_actions()if action in actionList:InputMap.action_erase_events(action)else:InputMap.add_action(action)append_keys(action,keylist)#向已有的相应字典中中添加一个按键func append_key(action:String,key:int )if keyMapData.get(action)if key in keyMapData[action]:returnelse:keyMapData[action].append(key)else:keyMapData[action] = [key]var myKey InputEventKey.new()myKey.scancode = keyInputMap.action_add_event(action,myKey)#为相应字典批量添加按键func append_keys(action:String,keylist:Array )for key in keylist:append_key(action,key)#打印当前的展示整个keyMapData字典func show_keymap():print(keyMapData)
可以看到这是一个很好的思路,将InputMap和相关的Action、Event操作封装起来。自动加载后,就可以全局使用。
只是代码可能不够简洁,
