GDScript 代码笔记(二)

该博客,我来浅谈一下FlappyBird中水管的脚本代码,并分别详细介绍extends,_ready()函数,randf()函数,_process()函数,Vector2,LEFT以及queue_free()函数的使用及其含义。

这次的代码内容是来自 开发游戏的老王的Godot教程中5.2 无尽水管子滚滚来(二)

由于本人刚开始接触这块内容,在多多向开发游戏的老王学习。所以在进行代码分析中,借鉴其代码,但大部分都是我本人对其代码本身的理解和官网解释结合思考。

欢迎各位批评指正。


总代码内容

#Pipe.gd
extends Node2D

func _ready():
	position.y += randf()*300-150 #Y轴随机偏移量的范围(-150,150)

func _process(delta):
	position += Vector2.LEFT*200.0*delta
	if position.x < 0:
		queue_free()

本博客采取分段的方法,来解释代码对应意思,并分别对关键内容进行讲解。


第一部分代码块

extends Node2D


extends

大家看到这里可能会说,诶,你摆这个代码,讲一些什么呢。

这里呢,便要着重强调这个extends的作用其对应的内容。

  官方解释

其实它就是官方解释的一样,它是继承某一个脚本,某一个节点的性质等等。


这里就不详细说了。

例如在上一篇的博客中,讲到Timer节点中的脚本讲解中GDScript中的var,preload以及connect()的含义讲解,它便是继承了Timer节点的timeout的信号。

在这里插入图片描述

这便是extends的作用及其相对应的内容。

那么回归本节代码内容,它其实就是简单的继承了Node2D节点中的性质。


第二部分代码块


func _ready():
	position.y += randf()*300-150 #Y轴随机偏移量的范围(-150,150)

那么接下来,我就要讲一个不同于C语言函数的内容,就是出现的各种不同的函数形式。在之后接下来的代码讲解中,遇到关键的地方会着重去讲解一下。


_ready()函数

在这里插入图片描述

它便是在就绪后首先执行的函数,最先执行程序的指令。

ready用中文解释就是准备的意思,就跟平时我们做任意一件事情前,要有个准备阶段,再去进行实施阶段。那么_ready函数也是同样的作用,它便是准备阶段。

但是这里需要注意的是,_ready() 对于每个节点只能调用一次,不会再被调用第二次。

这也可同等类比于现实生活中,对于准备这个概念的衡量。

当然,若你非常需要再执行一次ready()函数,便可通过请求再次调用request_ready()来绕过,它可以在再次添加节点之前的任何地方调用。


randf()函数

在C语言中,可利用了rand()函数可以生成随机数,其作用是获取一定范围内的一个随机数
在python语言中,可利用random()函数可以生成随机浮点数,其作用可返回0<=n<1之间的随机实数n。
randf()函数在Godot中的作用使用,更类似于python语言对应的理解使用。

randf()它的作用便是随机在区间 [0, 1] 上出现一个随机的浮点数


position

它的具体使用就不详细说明,它其实就是默认Vector2( 0, 0 )。Vector的使用方法,会在下一个代码块结合去进行讲述。



func _ready():
	position.y += randf()*300-150 #Y轴随机偏移量的范围(-150,150)

这段代码的具体意义,就是调整水管对应的Y轴随机偏移这种情况,使得游戏的水管随机出现上下波动的情况。


摆下一个要讲的代码块

func _process(delta):
	position += Vector2.LEFT*200.0*delta
	if position.x<-900:
		queue_free()

func _process(delta):



_process()函数

processd对应的中文解释是进程的意思,就相当于在游戏中,计算机要处理对应的该函数的指令,执行游戏进程中的一些指令。

在官方的解释中,它对应的作用,便是在主循环的处理步骤中被调用。处理发生在每一帧,并且尽可能快。

在这里插入图片描述

那在该游戏设计FlappyBird中,实际实现水管出现的时候,我们制作的小鸟是始终没有发生着移动。但水管会随着时间和脚本的指令,重复并且向左移动,让小鸟跳过设置的水管障碍,从而完成得分。

使用该函数在此代码块中,是因为此处是需要执行水管均往左方向进行移动,并且是发生在游戏进程中。则处理指令需要快速迅速,这便符合它本身的作用了。

这便是process()函数为何在此处应用的原理了。


注意:

在这里插入图片描述

这里值得注意的是,process()里面有一个delta。
delta是以秒未单位。此处的意思便是该函数按秒进行处理。

第三部分代码块

	position += Vector2.LEFT*200.0*delta


Vector2

Vector对应的中文解释是向量的意思,由于我们这里所做的是2D游戏,其实就相当于我们在平面直角坐标系中对应的位置。

那么我们来看一下官方给的解释:
在这里插入图片描述

在这里大家可以注意到,是存在Vector2,它是包含x,y字段的。

那存在不存在Vector3呢?

在这里插入图片描述

答案是存在的,Vector3,它是包含x,y,z字段的,它其实运用范围较广的是3D游戏,因2D不存在第三维度的情况。

表层的意思就是这些啦。其实它也存在于其他多种函数的情况。若有感兴趣的,可以自己搜一搜相关的信息资料。


LEFT

LEFT 这里就不占太大篇幅进行描述了,它主要是左单位向量,表示左的方向。其英文意思与实际应用是一样的。


	position += Vector2.LEFT*200.0*delta

这里便是指的是其对应位置,要往左移动200每秒。(delta在前文有着介绍,不加赘述)


第四部分代码块

if position.x<-900:
		queue_free()

queue_free()

立马提到queue_free(),大家是不是十分陌生,但free()是不是大家仍很熟悉这个表达方式。

它便在计算机专业课的数据结构课程中,讲解过单链表的节点释放中有过其对应作用,上图:

在这里插入图片描述

那么摆一下在官网中的详细解释

在这里插入图片描述

这便是在Godot中的定义。


其作用便是在实际的游戏设计中,排队释放删除节点。

这里需要注意,是排队!!!因为是queue,其对应的英文解释是排队的意思。


if position.x<-900:
		queue_free()

那么这段代码的意思,便是位置小于-900的时候,便会释放节点。

这里大家会注意到,我的代码中是位置小于-900,不同于 开发游戏的老王 的小于0。

这是为什么呢,我会单独出一个博客进行讲解。

这里不便给大家赘述。


#Pipe.gd
extends Node2D

func _ready():
	position.y += randf()*300-150 #Y轴随机偏移量的范围(-150,150)

func _process(delta):
	position += Vector2.LEFT*200.0*delta
	if position.x < 0:
		queue_free()

今天所分析的代码,其在此设计游戏中的作用,便是让水管随机按照一定时间出现,并在移动到一定位置销毁的操作。


有需要讨论的地方,可以在我的评论区进行探讨。

在此感谢,开发游戏的老王的Godot教程 FlappyBird

你的点赞是我更新的动力~

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
### 回答1: Python 代码笔记是对 Python 程序代码的解释和说明。它可以帮助你理解代码的工作原理,并在以后更好地维护和编写代码。常用的代码笔记格式有注释、文档字符串等。示例代码: ```python # 计算平方 def square(x): """ 返回x的平方 """ return x*x print(square(4)) ``` 在上面的代码中,`# 计算平方`是注释,`"""返回x的平方"""`是文档字符串。 ### 回答2: Python代码笔记是程序员在学习和实践Python编程语言时记录的一种文档。它包括通过编写实际的Python代码示例来记录各种语法、函数、模块、库和算法的用法和应用。 Python代码笔记通常用于记录和整理编程语言的基本知识,并用代码示例来演示这些知识的具体使用。因为Python语言本身较为简洁易读,因此在代码笔记中使用Python语言编写示例代码非常方便。 通过编写Python代码笔记,程序员可以更好地理解和掌握Python编程语言的特性和用法。而且代码笔记还可以作为程序员的参考资料,帮助他们在遇到问题时快速找到解决方案并进行复用。 除了记录基本知识之外,Python代码笔记还可以用于记录程序员在实际项目中遇到的问题和解决方案。通过记录这些问题和解决方案,程序员可以在未来的项目中预防和避免相同的问题,并且能够提高自己的编程技巧和经验。 总之,Python代码笔记是程序员学习和实践Python编程语言时记录的一种文档。它可以帮助程序员整理知识、提高编程技巧,并成为他们解决问题和提高效率的有力工具。 ### 回答3: Python代码笔记是程序员在学习和使用Python语言时记录的一种方式。它可以包括以下内容: 首先,Python代码笔记通常会记录Python代码的基本语法和用法。这些笔记会列举Python的关键字、变量类型、运算符、控制流语句等基本知识点,以便在需要的时候进行快速查阅和复习。 其次,Python代码笔记还会记录一些常用的Python库和模块的使用方法。Python具有丰富的第三方库和模块,如numpy、pandas、matplotlib等,这些库在数据处理、科学计算、绘图等领域都有广泛的应用。通过记录库和模块的使用方法,可以帮助程序员实现特定的功能或解决具体的问题。 此外,Python代码笔记还会记录一些常见的编程技巧和经验。比如如何提高代码的效率、如何优化算法、如何进行调试等等。这些技巧和经验是程序员在实际开发中积累的宝贵资料,可以帮助他们更好地解决问题和提高工作效率。 最后,Python代码笔记还可以记录一些项目示例和实践经验。当程序员在开发具体的项目时,他们会遇到各种问题和挑战,记录下来的项目示例和实践经验可以为他们以后的开发工作提供参考和借鉴。这些实践经验可以包括项目的架构设计、数据库操作、接口调用等方面的知识。 综上所述,Python代码笔记是程序员学习和使用Python语言的重要辅助工具,它通过记录基本语法、常用库和模块的使用、编程技巧和经验以及项目示例和实践经验等内容,帮助程序员提高开发效率,解决问题,并不断提升自己的编程能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柠檬茶12138

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值