首页 > 其他分享 >GODOT4 按键重映射

GODOT4 按键重映射

时间:2023-10-16 23:02:40浏览次数:34  
标签:映射 GODOT4 text pressed key 按键 action event

创建按钮

创建Button节点, 勾选属性 Toggle mode

创建脚本

  1. 在按钮上创建gb脚本
  2. 在脚本中键入如下代码:
    @export var action: String = "ui_accept"  # 要重映射的动作名称  [项目设置->输入映射]  中的名称 
    
  3. 在gb脚本的 _ready() 方法中键入如下代码:
    func _ready():
    	# set_focus_mode(0)  # 将按钮设置为不可获取焦点
    	set_process_unhandled_key_input(false) # 关闭未声明按键的监听
    	text = "%s" % InputMap.action_get_events(action)[0].as_text()  # 按钮显示文字
    
  4. 并在信号中添加 toggled 响应 _on_toggled(button_pressed), 代码如下:
    func _on_toggled(button_pressed):  # 按下为true 未按下为false
    	set_process_unhandled_key_input(button_pressed)
    	if button_pressed:
    		text = "..."
    	else:
    		text = "%s" % InputMap.action_get_events(action)[0].as_text()
    
  5. 重写 func _unhandled_key_input(event) 方法:
    func _unhandled_key_input(event):  # 拦截未绑定的按键
    	InputMap.action_erase_events(action) # 删除绑定按键
    	InputMap.action_add_event(action, event) # 添加按键
    	text = "%s" % event.as_text()
    	#button_pressed = false
    	set_pressed(false)
    

效果

  • 按钮文字将会显示为某个按键
  • 按下按钮后, 按钮文字将会变为 ... 等待按键输入
  • 按下任意按键后, 按钮文字变为按下的按键名, 按钮自动弹起

使用

func _input(event):
	if event.is_action_pressed(action):
		print_debug("input get")

完整代码

点击查看代码
extends Button

@export var action: String = "测试"

func _ready():
	print_debug("ready")
	set_focus_mode(0)
	set_process_unhandled_key_input(false) # 关闭未声明按键的监听
	display_key()

func display_key():
	if len(InputMap.action_get_events(action)) == 0:
		text = "空"
	else:
		text = "%s" % InputMap.action_get_events(action)[0].as_text()
	print_debug(text)


func _on_toggled(button_pressed):  # 按下为true 未按下为false
	set_process_unhandled_key_input(button_pressed)
	if button_pressed:
		text = "..."
	else:
		display_key()


func _unhandled_key_input(event):  # 拦截未绑定的按键
	remap_key(event)
	set_pressed(false)
	#button_pressed = false

func remap_key(event):
	InputMap.action_erase_events(action) # 删除绑定按键
	if event.as_text() != "Escape":  # 如果按下的是esc则不绑定任何按键
		InputMap.action_add_event(action, event) # 添加按键

	text = "%s" % event.as_text()


func _input(event):
	if event.is_action_pressed(action):
		print_debug("input get")

标签:映射,GODOT4,text,pressed,key,按键,action,event
From: https://www.cnblogs.com/stc-kuxiao/p/17768602.html

相关文章

  • 分享教学项目:开源一个对象映射框架
    Maomi.Mapper项目地址:https://github.com/whuanle/Maomi.Mapper注:本项目用于教学目的,性能较差,请勿用于生产环境。MaomiMapper是一个使用表达式树构造生成对象成员映射的框架,即对象映射框架,用于配合笔者其它系列文章,用于教学目的。笔者此系列教程还没有公开,是讲解如何编写各......
  • FastDFS+Nginx - 本地搭建文件服务器同时实现在外远程访问「端口映射」 转载
    前言FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡......
  • AM@映射@函数@反函数@复合函数
    文章目录abstract从两个角度定义函数及相关概念直接定义引入映射这一概念,然后借助映射来定义函数讨论函数的最基本内容讨论复合映射和复合函数讨论逆映射和反函数及其性质相关的符号表示含义解释直接定义函数的定义设两个变量,是一个非空的实数集若存在一个对应规则,使得对......
  • 13-io扩展技术与存储器映射扩展
    IO扩展技术与存储器映射扩展io扩展方式代码如下:#include<REGX52.H>voidDelay_ms(unsignedintxms){ unsignedinti,j; for(i=0;i<xms;i++){ for(j=0;j<299;j++); }}void_74HC138(unsignedcharn){ switch(n){ case4: P2=(P2&0x1f......
  • MyBatis-XML映射文件
    1、Mybatis中#取参和$取参的区别  $会直接替换,而#会使用?先进行预处理 2、ResultMap的作用  实体类属性和数据库列名不匹配的时候(比如,数据库采用经典命名法,java使用驼峰命名法的时候)<resultMapid="basicMap"type="cn.wjcoder.domain.Employee"><!--......
  • 持久映射&固定映射
    前言内核地址空间的划分VMALLOC_START和VMALLOC_END之间的区域用于vmalloc分配逻辑上连续物理上不连续的内存。内核地址空间中还有一段区间用于高端内存的持久映射,PKMAP_BASE和FIXADDR_START,如果存在高端内存可以通过alloc_pages_node分配高端内存,然后调用kmap在持久映射区建......
  • 12.2 实现键盘模拟按键
    本节将向读者介绍如何使用键盘鼠标操控模拟技术,键盘鼠标操控模拟技术是一种非常实用的技术,可以自动化执行一些重复性的任务,提高工作效率,在Windows系统下,通过使用各种键盘鼠标控制函数实现动态捕捉和模拟特定功能的操作。键盘鼠标的模拟是实现自动化的必备流程,通常我们可以使用key......
  • 映射和函数
    设有非空集合X、Y及由X到Y的对应法则f,若对每个x属于X,存在唯一的y属于Y按f与之对应,则称f为X到Y的映射,记作f:X—>Y或y=f(x),x属于X。X为f的定义域,记作Df。f(x)={y|y=f(x),x属于Df}为f的值域,记作Rf。y=f(x)中,x为原像,y为像。注意1.X,Y不一定是数集,因为X可能是抽象的东西,Y也可能是抽象的东西,如X为全......
  • knative serving 域名映射
    创建应用hello-world.yamlapiVersion:serving.knative.dev/v1kind:Servicemetadata:name:helloworld-gonamespace:knative-demospec:template:spec:containers:-image:ghcr.dockerproxy.com/knative/helloworld-go:latestenv......
  • huoji69键盘的映射值
    先用xev程序获取按键的keycode的值,剩下的就是自己修改即可。修改.Xmodmap文件,内容为:1!keycode9=asciitildegrave2keycode9=asciitildegrave3!keycode66=Escape4keycode118=F12Insert5keycode119=F11Prior6keycode112=F10Next7keycode117=Delet......