在这篇博客中,我会讲GDScript代码表层一些的理解,有哪里大家觉得不太理解或者觉得哪里有问题的,欢迎大家来到我的评论区下面讨论和批评指正。
这次的代码内容是来自 开发游戏的老王的Godot教程中5.1 无尽水管子滚滚来(一)
讲解的是关于TImer节点的代码内容
#PipeManager.gd
extends Timer
var pipe_scn = preload("res://Objects/Pipe.tscn")#将要实例化的场景文件预加载进来
func _ready():
connect("timeout",self,"on_timeout")#将"timeout"信号连接到"on_timeout"方法
func on_timeout():
var pipe = pipe_scn.instance()#实例化
add_child(pipe)#将实例化的结果作为自身的子节点
刚开始学习这块代码的内容的时候,我不太懂其对应的语法结构,那这里就只能借助官网的代码解释来对应理解
由于目前本人只系统性的学习过C语言该编程语言,在这里会尽量的穿插一些C语言的变量以方便理解
我来分段代码进行讲述我的理解。
#PipeManager.gd
extends Timer
var pipe_scn = preload("res://Objects/Pipe.tscn")#将要实例化的场景文件预加载进来
var是其定义变量,preload是其预加载一个类或变量。
var
var其实相当于C语言中的学习int,double定义对应变量类型。
preload
这里的preload的作用在学习C语言中并未系统学习其对应作用的代码关键词,但它在Godot种顾名思义就是一种预加载的方式,它通过声明向对应路径声明一个需要提交加载的资源。当资源真正被使用的时候立即执行,无需等待网络的消耗,这便是preload的作用。
则在上篇帖子中,强调此处代码对应的路径若出错,便使得整个程序报错。也就是换句话来说,我们所输入对应的路径是不存在的,计算机是并非能识别此代码。
则对应此处代码含义:
#PipeManager.gd
extends Timer
var pipe_scn = preload("res://Objects/Pipe.tscn")#将要实例化的场景文件预加载进来
func _ready():
connect("timeout",self,"on_timeout")#将"timeout"信号连接到"on_timeout"方法
func on_timeout():
var pipe = pipe_scn.instance()#实例化
add_child(pipe)#将实例化的结果作为自身的子节点
此代码的意义就是将res://Objects/Pipe.tscn的路径预加载到pipe_scn中。
func _ready():
connect("timeout",self,"on_timeout")#将"timeout"信号连接到"on_timeout"方法
connect()函数:
这里有个connect的关键词十分使人头疼,它有着什么作用呢。 英文翻译过来其实就是连接,那它在函数中的实际意义其实就是充当连接的作用。 |
这张就是官方对信号及其connect的关键词一个作用的简单介绍。
其实简单来说,就是把A连接在B上。在触发A的同时,会同时触发B这个信号。
在官方给出的函数解释中,其实就是health_depleted 信号连接到 Game 节点,然后发出信号,随之会调用_on_Character_health_depleted。
这便是connect的作用。
在开发游戏的老王中的Timer节点使用范例中,就有着利用connect的概念结合Timer节点制作一个定时器。摆一下连接:
Godot Engine:Timer节点使用范例
extends Timer
func _ready():
connect("timeout",self,"_on_timeout")
func _on_timeout():
print("到时间了")
这是制作定时器的代码脚本,Timer节点由于信号很简单,到了Wait Time的时间就发出一个timeout信号。
那么发出timeout信号之后,因connect函数的连接。自然而然就会调用func _on_timeout()函数,随之,利用printf输出到时间啦!
这便是制作定时器的所有原理。
那么回归我们本节内容的代码,既然要有connect函数的连接,自然而然就需要调用对应的函数。
func _ready():
connect("timeout",self,"on_timeout")#将"timeout"信号连接到"on_timeout"方法
func on_timeout():
var pipe = pipe_scn.instance()#实例化
add_child(pipe)#将实例化的结果作为自身的子节点
那么等同于同上讲述计时器的概念。在调整后wait time的时间后,在隔一段时间,就会对应就会出现timeout信号。
随之就会根据所连的connect的函数,便调用on_timeout()函数。
那么这里就不细说on_timeout()函数对应的概念内容了,若有问题可以在评论区讨论。
第一行代码便是将之前待加载中的代码利用instance实例化,也就是我们说的加载的意思。
第二行代码便是我们说的进行重复出管子,将自身作为子节点,反复进行调用。 (这里利用add这一关键词,大家如果想更多了解,可以自己搜索一些相关的关键词解释)
出这个讲解代码的Godot专题,比较耗费时间,会更新稍微晚一些,更新的内容相对没那么多。请各位谅解!
也欢迎各位批评指正。在此也感谢 开发游戏的老王 的Godot教程。【手把手带你Godot游戏开发 第一弹】零基础入门案例:FlappyBird(教程目录及源代码)
点赞,是最好的鼓励哟~