10.Godot Input与自定义单例的使用

Godot 4 实战:从零构建像素风农场模拟游戏核心系统 2D游戏开发中,TileMap系统是构建网格化世界的核心技术,它通过图块(Tile)与自定义数据层(Custom Data Layers)高效管理地形与交互逻辑。其原理是将游戏世界划分为网格,每个图块携带属性数据(如是否可通行、可耕种),从而实现数据驱动的游戏逻辑。这一技术价值在于极大提升了地图编辑效率与游戏逻辑的灵活性,尤其适用于农场模拟、策略、RPG等需要复杂地图交互的场景。结合Godot 4的信号(Signal)与单例(Singleton)机制,可以优雅地实现全局游戏时间系统与模块化交互。本文以复刻《 阅读详情

单例

  • 单例是一个可以在任何一个脚本中对其进行直接访问的对象,分为内置单例与自定义单例。每个单例都是独一无二的对象。
  • 内置单例不是节点,主要成员是各类 Server,开发者可以使用它们直接控制游戏程序的图形与音效等内容。此外,还包括了一些其他对象,它们涉及的范围包括网络、时间、电脑系统、输入等。
  • 自定义单例必须是节点类型的对象,是开发者自定义的全局对象。
    ![[Pasted image 20240421162400.png]]

在帮助里面找到Globalscope
![[Pasted image 20240421162426.png]]

属性里面就是可以访问的内置单例

Input 单例

1. Input 单例
  • Input 是一个重要对象,它可以对玩家的按键情况进行反馈
  • Input 的 Action 手动设置,即游玩游戏的键位设置
  • Input 的常用函数介绍
    ![[Pasted image 20240421162611.png]]

打开项目设置,输入映射
可以添加自己Action
![[Pasted image 20240421162715.png]]

输入向左走,点击添加
![[Pasted image 20240421162752.png]]

点击右边的+号,添加事件
![[Pasted image 20240421162844.png]]

使用英文输入法点击A,输入A键
![[Pasted image 20240421162928.png]]

然后点击关闭
![[Pasted image 20240421163208.png]]

创建一个Sprite节点,为其添加一个脚本
![[Pasted image 20240421163315.png]]

可以直接访问Input单例
ctrl+左键,点击进入文档
![[Pasted image 20240421163447.png]]

有个get_action_strength,这个函数可以返回按下某个按键的力度
按键取决于之前action的设置,返回的值会介于0~1之间
如果使用的是一般的键盘,返回值就固定是0或1,按下是1,没按时0

在ready函数里输入

print(Input.get_action_strength("向左走"))

![[Pasted image 20240421164821.png]]

![[Pasted image 20240421164811.png]]

会输出一个0,指力度是0

把这行代码放到process函数里的时候,运行
会不断出现0,在按住A键的时候,会输出1

2. 轮询
  • 在_process 或_physic_process 中通过 Input 单例来获取按键情况,这种一秒数十次检测游戏输入情况的编码方式称为轮询。
  • If+ 轮询 + 修改内置变量 = 游戏在玩家的控制下发生实质性的改变。
    输入
if Input.get_action_strength("向左走"):
	self.position.x = self.position.x - 1

![[Pasted image 20240421165552.png]]

运行场景后,当按住A键,精灵节点会向左移动
![[Pasted image 20240421165626.png]]

![[Pasted image 20240421165614.png]]

自定义单例

自定义单例步骤
  • 创建一个新脚本

  • 在项目设置中选择 Autoload。
    ![[Pasted image 20240421165747.png]]

  • 选择脚本路径
    ![[Pasted image 20240421165851.png]]

![[Pasted image 20240421165915.png]]

右边可以修改单例的名称

  • 点击添加
    ![[Pasted image 20240421170002.png]]

![[Pasted image 20240421170047.png]]

AA的单例就被添加到游戏中
![[Pasted image 20240421170133.png]]

可以识别AA单例
ctrl点击进去,会转到刚才新建的脚本文件里
可以在其中自定义变量和函数
![[Pasted image 20240421170330.png]]

可以进行访问和调用
![[Pasted image 20240421170413.png]]

![[Pasted image 20240421170433.png]]

自定义单例特征及用途
  • 可以在任意一个脚本中对它们进行直接访问
  • 用于记录全局变量
Godot输入系统常见问题排查与Input Helper优化指南 在游戏开发中,输入系统是连接玩家操作与游戏逻辑的核心桥梁,其稳定性和响应速度直接影响游戏体验。输入系统的工作原理通常涉及事件捕获、状态管理和动作映射等多个环节。一个设计良好的输入系统能显著提升游戏的操作手感和可访问性,尤其在跨平台项目中,需要统一处理键盘、手柄和触摸等多种输入方式。在实际开发中,开发者常会遇到输入延迟、设备兼容性、多键组合识别等工程挑战。本文聚焦于Godot引擎的输入系统,针对Input Helper这类工具在实际使用中的高频问题,如输入延迟、手柄检测失灵、触摸坐标不准等,提供了一套从原理分 阅读详情

相关推荐

用Godot游戏引擎开发跨平台桌面看板应用:从数据设计到交互实现

游戏引擎不仅是游戏开发的利器,其内置的场景管理、节点系统和脚本语言也为构建交互式应用提供了高效的原型工具。以Godot引擎为例,其轻量、开源的特性和易学的GDScript语言,使其在快速开发复杂UI和数据驱动的应用方面展现出独特优势。通过自定义资源(Resource)进行数据建模,利用单例(Autoload Singleton)实现全局状态管理,开发者可以构建出数据层与表现层清晰分离的应用程序。这种架构特别适合需要复杂状态管理和实时交互的应用场景,例如任务管理工具。本文以开发一个桌面看板应用为具体案例,详细

weixin_34099526的博客 412

Godot学习笔记7——Input单例与自定义单例

我们也可以在项目中自定义一个单例,只需要在项目文件中新建一个脚本,并写入如下代码:接着,我们来到“项目”-“项目设置”-“自动化加载”,将我们的脚本加入进去:点击路径右侧的文件夹按钮即可选择脚本,在节点名称处可以自定义名称。接着,我们在刚才“Sprite2D”挂载脚本下写下如下代码:运行后可以看到,它将a变量所代表的值和b函数都执行了一遍。

fengtian65的博客 973

从零开始用Godot引擎构建模块化RPG游戏框架:角色、对话、库存与任务系统全解析

游戏开发中,构建一个结构清晰、可扩展的框架是项目成功的关键。其核心在于遵循“高内聚、低耦合”的设计原则,通过模块化将复杂系统拆分为独立、可复用的功能单元。这种架构模式能显著提升代码的可维护性和团队协作效率,尤其适用于角色扮演游戏(RPG)这类包含大量交互实体和状态逻辑的项目。在实践中,数据驱动设计是连接策划与程序的高效桥梁,通过定义可序列化的资源(Resource)来管理游戏内容,使调整无需修改核心代码。Godot引擎凭借其轻量、开源的特性和独特的节点(Node)场景架构,为快速实现此类模块化设计提供了理想

weixin_34235457的博客 434

godot4实现一个单例类,作为公共数据共享类

转到 "Project" > "Project Settings" > "AutoLoad",并添加你刚刚创建的脚本。为它提供一个名称(例如 "GlobalData"),并指定脚本的路径。1. 创建一个新的 GDScript 文件,例如 `GlobalData.gd`,并在其中定义你想要共享的变量和函数。在 Godot 4 中,你可以通过创建一个自动加载的脚本来实现单例类,用于作为公共的数据总线。现在,你可以在项目的任何地方通过 `GlobalData` 单例访问这些公共数据和函数。

exlink2012的专栏 1222

Godot单例和自动加载

Godot Singletons and Autoloads(单例和自动加载) 介绍 Godot的场景系统功能强大且灵活,但有一个缺点:没有一种方法可以存储多个场景所需的信息(例如,玩家的得分或存货)。 可以通过一些解决方法来解决此问题,但是它们有其​​自身的局限性: 您可以使用一个 "主 "场景,它可以加载和卸载其他场景(这些场景作为它的子场景)。然而,这意味着你不能再单独运行这些场景并期望它们能正常工作。 可以将信息存储在user://中的磁盘上,然后由需要的场景进行加载,但是频繁的保存和加载数据很麻

游戏开发 1682

Godot引擎开发:信号与事件系统_输入事件处理v1

首先,我们需要在一个节点中定义和发出信号。假设我们有一个节点,用于处理输入事件并发出信号。# 定义信号# 重写 _input 函数在这个例子中,我们在节点中定义了jumpmove_left和move_right信号,并在_input函数中根据输入事件发出相应的信号。在Godot引擎中,处理输入事件是游戏开发中的重要部分。通过使用_input函数、InputMap和InputEvent类,你可以捕获和响应多种输入设备的输入,包括键盘、鼠标、触摸屏和控制器。

chenlz2007的博客 1603

Godot4:零基础入门学习笔记(20260112)——单例

这篇博客介绍了Godot游戏引擎中的单例模式应用。内容分为内置单例和自定义单例两部分:内置单例主要包括各类服务器组件,用于控制游戏图像、音效等系统功能;自定义单例则是开发者创建的全局节点对象。文章详细说明了Input单例的使用方法,演示了如何通过按键控制精灵移动,并提供了创建自定义单例的具体步骤:创建脚本→项目设置→添加全局脚本。该教程适合Godot初学者学习游戏开发中的全局变量管理。

JohnWan2Dunk的博客 376

godot-logger:记录Godot Engine项目的单例(GDScript插件)

记录器-记录Godot引擎的单例 Logger类是GDScript单例,它为使用开发的项目提供了记录API。 用法 将logger.gd文件复制到您的项目文件夹中,并在项目设置中将其定义为自动加载的单例(例如,名称为Logger ): Logger="*res://logger.gd" 然后可以通过Logger单例从任何其他脚本访问API的方法: Logger.warn("Alpaca mismatch!") Logger.add_module("mymodule") Logger.info("Reticulating splines...", "mymodule") 阅读该代码以获取有关该API的详细信息,该文档已有大量文档。 输出格式配置 可以使用FORMAT_IDS词典中的格式字段来自定义output_format属性。 它们是占位符,将由相关内容替换。 日志格式

godot学习笔记

可以在任意脚本直接访问的对象,分为内置和自定义;不是节点,可以直接使用控制图形和音效;例:Input,对玩家按键情况进行反馈Input.get_action_strength(”自定义按键“)//按下为true,没按为0在某一节点可以使用self指定其本身,position代表其位置.x和 .y可以访问坐标。

annewplayer的博客 2216

ArcGIS数据处理必备技能:从地理坐标到UTM投影的面转栅格完整流程

本文详细介绍了在ArcGIS中从地理坐标到UTM投影的面转栅格完整流程,包括坐标系转换、像元大小设置及质量控制等关键步骤。通过实战案例和Python脚本示例,帮助用户解决常见问题并优化数据处理效率,特别适合需要精确GIS数据分析的专业人士。

weixin_42628688的博客 180

xsens IMU配置

1.安装驱动 sudo apt-get update sudo apt-get install ros-kinetic-xsens-driver 2.配置IMU 设置输出四元数,加速度、角速度、地磁 cd /opt/ros/kinetic/lib/xsens_driver python mtdevice.py --configure "oq,aa,wr,mf" 3.启动IMU roslaunch xsens_driver xsens_driver.launch 转(https://www.cnblo

qq_41585680的博客 2325

【Godot引擎开发】简单基础,外加一个小游戏DEMO

Godot引擎是一款免费、开源的跨平台游戏开发引擎。它提供了一个用户友好的集成开发环境,支持2D和3D游戏开发,并且拥有强大的功能和工具。Godot引擎具有简单易学的脚本语言,可以帮助开发者迅速实现自己的创意和想法。它还支持多种不同平台的发布,包括Windows、Linux、Mac、Android和iOS,使得开发者能够轻松地将自己的游戏推向全球市场。如果你对游戏开发有兴趣,Godot引擎将是一个值得尝试的工具

云散的博客 2117

保姆级避坑指南:用Docker在Ubuntu 22.04上部署Isaac Sim 5.1.0,搞定宇树G1仿真环境

本文提供了一份详细的保姆级避坑指南,帮助用户在Ubuntu 22.04上通过Docker部署Isaac Sim 5.1.0,并成功搭建宇树G1仿真环境。文章涵盖了环境准备、Docker与NVIDIA容器工具包的配置、Isaac Sim镜像的定制化拉取与配置,以及宇树G1仿真环境的实战调试,旨在帮助开发者高效解决部署过程中的常见问题。

weixin_33728268的博客 207

Godot Input Helper 使用教程

Godot Input Helper 是一个为 Godot 游戏引擎设计的开源插件,旨在简化游戏输入处理。通过这个插件,开发者可以更容易地管理键盘、鼠标和游戏手柄的输入,从而加快开发速度并提高代码的可维护性。该项目由 Nathan Hoad 开发并维护,源代码和相关文档均托管在 GitHub 上。 ## 项目快速启动 ### 安装步骤 1. **克隆仓库**:首先,从 GitHub 克隆 G...

gitblog_01084的博客 615

金蝶云星空-协同开发云-安装开发环境

金蝶协同开发云就是不需要每一个开发都在自己的本机安装开发环境,自己安装可容易出错,包括源代码管理也一并解决了,大大减少了开发人员的工作量和降低了上手的难度。

qq_33881408的博客 5596

《YOLOv8实例分割实战:训练自己的数据集 》(视频课程)

本课程将手把手地教大家使用labelme标注和使用YOLOv8训练自己的数据集,完成一个多目标实例分割实战项目。

bai666ai的博客 790

终极指南:如何使用Godot Input Helper简化游戏输入管理 [特殊字符]

Godot Input Helper是一个专为Godot 4引擎设计的输入管理插件,它让游戏输入配置变得异常简单。无论你是刚接触游戏开发的新手,还是经验丰富的开发者,这个工具都能为你节省大量时间。 ## 🤔 为什么你需要Godot Input Helper? 在传统游戏开发中,处理多种输入设备(键盘、鼠标、各种手柄)往往需要编写复杂的代码。Godot Input Helper通过以下功能彻底

gitblog_00077的博客 553

高电压技术的面试内容整理(详细版本:57题)

涵盖了高电压技术的关键领域,包括气体放电的物理过程、液体和固体介质的绝缘特性、高压外绝缘的分类与特性、电气设备绝缘试验的方法与原理、电力系统的防雷保护措施,以及内部过电压的产生、影响与限制方法,为理解和应对高电压环境下的电气问题提供了系统的知识框架。通过深入探讨气体放电理论、介质极化与损耗、绝缘子的电气特性、绝缘试验技术、防雷策略以及内部过电压的管理。

weixin_44808274的博客 775

Godot 输入事件GUI Input Event处理流程

godot主要有三种事件处理函数 input(), gui_input(), unhandled_input() 并且会依次按照 input() -> gui_input() -> unhandled_input() 的顺序执行, 即所有对象执行完 input() 后才会调用 gui_input(),所有对象 gui_input() 判定结束后再调用 unhandled_input()。gui_input() 不像input() ,并不是所有对象都会调用 gui_input()。

qq_53374241的博客 936

matlab 一维相位解缠

一维相位解缠算法的matlab代码实现。

点云侠的博客 372

初学者入门YOLO目标检测:从懵圈到上手,这篇文章讲透所有核心(附学习路径+避坑指南)

目标:比如训练一个“检测苹果和橘子”的模型,或者“检测人脸”的模型;任务:学会用LabelImg标注数据,制作YOLO格式的数据集,用命令行训练模型;关键:不用追求高精度,能训练出一个能检测出目标的模型就行。很多初学者卡在入门阶段,不是因为智商不够,而是因为“想太多,做太少”——总觉得要把所有原理搞懂才能动手,结果越想越怕,最后放弃。先动手,再动脑。先跑通一个案例,获得成就感;再制作自定义数据集,训练简单模型;最后再回头去理解原理,优化模型。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 690

【亲测免费】 Godot Touch Input Manager:增强Godot游戏引擎触摸输入支持

Godot Touch Input Manager:增强Godot游戏引擎触摸输入支持 1. 项目基础介绍 Godot Touch Input Manager(GDTIM)是一个开源项目,旨在改进Godot游戏引擎中的触摸输入支持,并增加了新的手势识别功能。该项目主要通过Godot脚本语言实现,这是一种易于学习且功能强大的脚本语言,允许开发者通过脚本控制游戏的各个方面。 2. 核心功能 GDTIM...

gitblog_00278的博客 669

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

RapidOCR 安装与上手:两条命令跑通本地多语言 OCR

RapidOCR 是一个免费开源的 OCR 工具包,把 PaddleOCR 模型转成 ONNX 格式后在本地做高速推理,能自动找出图片里文字的位置并读出中英文内容。这篇 RapidOCR 安装教程只需要两条核心命令,几分钟后你就能拿到带坐标和置信度的结构化识别结果。 [![RapidOCR OCR 识别支持的中日文多语言文本样例](https://raw.gitcode.com/GitHub_T

gitblog_00634的博客 1060

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Godot 4项目模板:模块化架构与工程化开发实践指南

在游戏开发中,模块化架构和工程化开发是提升项目可维护性和团队协作效率的核心实践。模块化通过高内聚、低耦合的设计原则,将系统拆分为独立的功能单元,降低代码复杂度。工程化则引入标准化流程和自动化工具,确保开发过程的可重复与可验证。这些实践能显著提升代码复用率,减少重复劳动,并优化项目结构。在Godot引擎中,通过合理的目录规划、事件总线(EventBus)和单例模式等技术,可以构建清晰的项目框架。本文以Godot 4项目模板为例,详细解析如何应用模块化与工程化思想,设计可扩展的目录结构、核心系统模块和自动化工作

weixin_30945039的博客 454

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Godot 学习记录

看视频做的笔记 1

conan666666的博客 3508

Godot多手柄冲突解决方案:基于GUID的唯一标识与控制器管理

在游戏开发中,输入系统是连接玩家与虚拟世界的桥梁,其核心原理在于准确捕获并解析硬件设备的操作指令。传统上,游戏引擎通过设备索引来识别控制器,但这种方式在多手柄场景下容易因连接顺序变化导致冲突,影响本地多人游戏的体验。为了解决这一问题,需要引入更稳定的设备标识机制。通过获取设备的全局唯一标识符(GUID)或结合设备名称生成唯一签名,可以构建一个健壮的控制器管理系统。这项技术的价值在于确保了每个输入设备的独立性与可追溯性,为本地同屏多人游戏、定制硬件集成(如STM32控制器)以及通过NucleusCoop等软件

weixin_33782386的博客 440
上一篇: 13.Hexo Plugins插件及将网站上传到互联网
下一篇: 9.MMD 基础内容总结及制作成品流程
ChoSeitaku
博客等级 码龄5年 3452粉丝 557原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值