Godot学习笔记4——函数

news2024/9/23 5:28:14

GDScript中函数也叫方法或模块,与变量一样,包括自定义函数与内置函数。大部分内置函数可以对游戏内容产生实质性影响,少部分函数比较特殊。

一、函数定义

在Godot中,我们使用“func”来定义函数,后面跟函数名、括号和冒号,下面一行缩进跟一个“pass”,这个“pass”并无任何意义,只是一个函数的结构。

函数的命名规则与变量的命名规则一致,打头的必须是字母或下划线,组成元素必须为字母、数字、下划线。

函数有三个关键信息,分别是输入信息、处理流程和处理结果。

二、函数调用

函数也是属于不同对象的,所以我们在调用函数时也必须指明函数的所属。我们在Godot中写下如下代码:

运行,即可看到编译器输出了“Hello”,证明函数调用成功。

这里的“self.”代表此函数是节点内部的,此处可省略。

我们再在Godot中写下如下代码:

编译运行后,可以看到输出了2,而没有输出“Hello”,这是因为在函数add中,我们已经把c的值“return”了出去,所以下一行代码就不会执行了。打开警告栏,可以看到编译器对代码发出了警告:

在这里,“add”函数被我们改造成了带参函数。当我们调用add函数时,需要传给它两个实参,而add函数在这里的作用是将两个值相加,并返回。

在具体代码中,a和b为形参,传入的(1,1)为实参。具体概念可查看相关文档。在这里,我们不仅可以定义所需参数的个数,也可以定义所需参数的类型,还可以给参数设定一个默认值,当调用时没有值传入就会使用默认值: 

可以看到,运行结果为17。

我们也可以给它传值,此时会覆盖原有的默认值:

可以看到,输出结果为3而不是17。 

我们不仅可以定义所需参数的类型,也可以定义整个函数的类型:

在函数定义之后加一个“->”,指向一种类型,然后运行,可以看到结果是5,小数部分被舍掉了。 

三、虚函数与内置虚函数

 虚函数是指没有实际处理流程的函数,这部分函数的内容可以由我们自行编写。而内置虚函数则是指Godot的制作组规定了特定名称却没有实际处理流程的函数。节点内的虚函数会在特定的条件下自动被触发。

例如:

条件1:当节点本身或其周围节点状态发生改变时,节点内部的某些虚函数就会被触发,如:

  • 节点创建
  • 节点进入“场景树”
  • 节点离开“场景树”
  • 节点死亡前
  • 节点的子节点全部加入场景树

 条件2:当场景树的状态发生改变时,且节点自身处于“树”下。如:

  • 画面刷新
  • 物理引擎刷新
  • 硬件设备输入

条件3:其他情况 

常用虚函数:

  1. _init:当节点被创建时进行调用的虚函数
  2. _ready:节点的所有子节点加入场景树时调用的虚函数
  3. _process: 每当画面刷新时(每一帧)调用的虚函数
  4. _physic_process:物理引擎刷新时调用的虚函数

需要注意的是,3和4两个函数内部都有一个名为delta的参数,代表距离上次画面刷新或物理引擎刷新所经过的时间。

四、函数中的变量 

每一个函数都有一个内部的作用域,在一个函数内部定义的变量无法在另一个函数中直接访问。在函数运行结束时,函数内部的变量会自动销毁。在某些情况下,变量所代表的数据不会自动销毁,但变量一定会自动销毁。

不同函数内部的变量不能直接访问

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1946662.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

php仓库管理系统设计与实现

1.1 研究背景 随着经济一体化和电子商务的迅速发展,网络传播信息的速度打破了传统信息传递的模式,互联网的高速发展和计算机应用在各个高校进展迅速,更多信息化产品的突飞猛进,让现代的管理模式也发生了巨大的变化,本…

0503触发器的电路结构和工作原理

触发器的电路结构和工作原理 如何区分锁存器还是触发器, 看有没有这个三角符号,告诉是上升沿触发还是下降沿触发,没有三角符号就是电平触发。低电平触发就画个小圈。高电平触发就不画小圈。有小圈的三角就是下降沿触发 setup建立时间 hold 保…

ecshop网站部署

目录 步骤1 ecshop网站的部署 一、安装环境 二、设置开机启动 ​三、 测试php ​四、上传安装包 五、安装ecshop 步骤1 ecshop网站的部署 一、安装环境 yum install -y httpd mariadb-server php php-devel php-mysql 浏览器访问:192.168.30.2 二、设置开机启…

解决小程序web-view两个恶心问题

🧑‍💻 写在开头 点赞 收藏 学会🤣🤣🤣 1.web-view覆盖层问题 问题由来 web-view 是一个 web 浏览器组件,可以用来承载网页的容器,会自动铺满整个页面。 所以这得多恶心。。。不仅铺满&…

集合的面试题和五种集合的详细讲解

20240724 一、面试题节选二、来自于b站人人都是程序员的视频截图 (感谢人人都是程序员大佬的视频,针对于个人复习。) 一、面试题节选 二、来自于b站人人都是程序员的视频截图 hashmap: 唯一的缺点,无序&#xf…

mysql之视图的创建以及查询;

一:数据库及其表的创建: mysql> create database mydb15_indexstu; Query OK, 1 row affected (0.00 sec)mysql> use mydb15_indexstu; Database changed mysql> create table student(-> sno int primary key auto_increment,-> sname …

js语法 proxy对象拦截方法详解,proxy代理一个对象(数组,函数)的操作方法

如果还不能理解什么是proxy代理可以参考:js语法---理解反射Reflect对象和代理Proxy对象_js代理对象-CSDN博客 proxy代理对象(数组,函数),可以拦截的操作 apply---拦截方法的执行(包括直接执行,通过apply,call执行),和对…

【element ui】input输入控件绑定粘贴事件,从 Excel 复制的数据粘贴到输入框(el-input)时自动转换为逗号分隔的数据

目录 1、需求2、实现思路:3、控件绑定粘贴事件事件修饰符说明: 4、代码实现🚀写在最后 1、需求 在 Vue 2 和 Element UI 中,要实现从 Excel 复制空格分隔的数据,并在粘贴到输入框(el-input)时自动转换为逗号分隔的数据…

Pycharm 和虚拟环境的那些事?

背景: 我既有 python 又有Anaconda Pycharm新建虚拟环境: 只说两种方式 通过Virualenv Environment新建: 这里我们勾选上 Make available to all projects ,之后点击🆗 然后可以发现只有非常少的包,因为没有勾选继承 编译器的包 创建的虚拟环境一般目录如下&…

【Git多人协作开发】知识点总结

目录 知识点总结 1.创建dev分支开发 1.1在本地创建 1.1在远程创建(推荐) 2.远程分支和本地分支建立连接☞pull和push操作 2.1情况1 2.2情况2 2.3情况3 3.本地仓库对远程仓库的拉取pull操作 3.1情况1 3.2情况2 4.将开发分支的内容合并到远程m…

充电桩浪涌保护方案—保障充电设施安全稳定运行的关键

在当今新能源汽车蓬勃发展的时代,充电桩作为电动汽车的“加油站”,其重要性不言而喻。然而,由于其复杂的电气环境和暴露于户外的特点,充电桩容易受到浪涌的影响。浪涌可能来自雷电、电网故障、大功率设备的启停等,对充…

在 Windows 上安装 PostgreSQL

官网下载地址: https://www.enterprisedb.com/downloads/postgres-postgresql-downloadsWindows平台 官网直接提供exe安装包,没有手动安装的压缩包 postgresql-14.4-1-windows-x64.exe几个重要的安装选项 安装界面会指定服务程序和库两个路径&#xf…

5G赋能车联网,无人驾驶引领未来出行

无人驾驶车联网应用已成为智能交通领域的重要发展趋势。随着无人驾驶技术的不断进步和5G网络的广泛部署,5G工业路由器在无人驾驶车联网中的应用日益广泛,为无人驾驶车辆提供了稳定、高效、低时延的通信保障。 5G工业路由器的优势 低时延:5G网…

【STM32 HAL库】ADC

ADC,顾名思义就是模拟信号->数字信号ADC工作原理 分类: 并联比较型-----转换速度快-----成本高、功耗高、分辨率低 分压部分比较部分编码部分(其中Vx为模拟电压输入 ) 逐次逼近型-----结构简单,功耗低-----转换速…

electron 网页TodoList应用打包win桌面软件数据持久化

参考: electron 网页TodoList工具打包成win桌面应用exe https://blog.csdn.net/weixin_42357472/article/details/140648621 electron直接打包exe应用,打开网页上面添加的task在重启后为空,历史没有被保存,需要持久化工具保存之前…

汽车免拆诊断案例 | 2018 款别克阅朗车蓄电池偶尔亏电

故障现象 一辆2018款别克阅朗车,搭载LI6发动机和GF6变速器,累计行驶里程约为9.6万km。车主反映,该车停放一晚后,蓄电池偶尔亏电。 故障诊断 接车后用虹科Pico汽车示波器和高精度电流钳(30 A)测量该车的寄…

ElementUI,修改el-table中的数据,视图无法及时更新

需求&#xff1a;点击table表格中的“修改”之后&#xff0c;当前行变为可输入状态的行&#xff0c;点击“确定”后变为普通表格&#xff1b; 先贴上已经完美解决问题的代码 实现代码&#xff1a; <section><div style"display: flex;justify-content: space-b…

数据中心服务器搬迁团队

数据中心机房服务器搬迁&#xff0c;需要专业的数据中心机房服务器提供技术保障服务。友力科技&#xff08;广州&#xff09;有限公司&#xff0c;作为华南地区主流的数据中心服务商&#xff0c;专业从事数据中心机房搬迁服务。 数据中心机房搬迁涉及设备数量多、系统复杂&…

基于联盟链Fabric 2.X 的中药饮片代煎配送服务与监管平台

业务背景 近年来&#xff0c;随着公众对中医药青睐有加&#xff0c;中药代煎服务作为中医药现代化的重要一环&#xff0c;在全国各地蓬勃兴起。鉴于传统煎煮方式的繁琐耗时&#xff0c;医疗机构纷纷转向与第三方中药饮片企业合作&#xff0c;采用集中代煎模式。这些第三方煎药中…

goenv丝滑控制多版本go

安装 先装下goenv brew install goenv去 ~/.bash_profile 添加一下 export GOENV_ROOT"$HOME/.goenv" export PATH"$GOENV_ROOT/bin:$PATH" eval "$(goenv init -)"执行一下让配置生效 source ~/.bash_profile插一嘴&#xff0c;如果之前是在…