来源
本例中的代码来自UP主@nearron的SetKey类相关视频。
视频地址:https://www.bilibili.com/video/BV13U4y1U7W3?spm_id_from=333.999.0.0
源码
extends Node
var 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
# 否则直接添加Action
func 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]:
return
else:
keyMapData[action].append(key)
else:
keyMapData[action] = [key]
var myKey InputEventKey.new()
myKey.scancode = key
InputMap.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操作封装起来。自动加载后,就可以全局使用。
只是代码可能不够简洁,