0
点赞
收藏
分享

微信扫一扫

GDScript 代码笔记(三)

九点韶留学 2022-03-31 阅读 9
godot

文章目录


总代码块

#ScoreArea.gd
extends Area2D

func _ready():
	connect("body_exited",self,"_on_body_exited")
func _on_body_exited(_body):
	if _body.name == "Bird":
		AudioManager.play("sfx_point")
		GameData.score += 1
		#加分以后通过SceenTree把新的分数更新给所有想接受这个消息的节点
		get_tree().call_group("SCORE","on_score_updated",GameData.score)

Connect

Connect的用法和理解,在之前博主的博客中有过详细讲解,这里就不细讲解对应解法。

GDScript 代码笔记(一)

在此函数代码块中,便是通过Connect函数将body_exited的信号连到_on_body_exited。

在发出信号之后,调用func _on_body_exited(_body):


if 用法


1.官方解释


在这里插入图片描述
在Godot的官网中,其实并没有过多篇幅详细去介绍其使用以及讲解。

2.C语言中的if用法

我们将C语言在if语句中的使用进行讲解。

因其类似于Godot语言在if语句的使用,我们进行拆分说明。

(1).简单if语句

if(表达式)
{
执行代码块;
}

其执行顺序便是:如果表达式的值为真,则执行其后的代码块内容,否则不执行该代码块。

(2).简单if-else语句

if(表达式)
{
执行代码块1;
}
else
{
执行代码块2;
}

执行顺序是: 如果表达式的值为真,则执行代码块1,否则执行代码块2。

(3).简单if-elseif-else语句

if(表达式1)
{
执行代码块1;
}
else if(表达式2)
{
执行代码块2;
}
else
{
执行代码块3;
}

执行顺序是:

如果表达式1的值为真,则执行代码块1;

若表达式1为假,则执行表达式2;

如果表达式2的值为真,则执行代码块2;

若表达式2为假,则执行表达式3。

3.Godot中的if用法

if [expression]:
    statement(s)
elif [expression]:
    statement(s)
else:
    statement(s)

(1).逻辑顺序

那么它的逻辑顺序,就类似于C语言的逻辑顺序。

(2).表达方式

那么它的表达方式,仍于C语言有着区别。

var fruit = (
        "apple" if count == 2
        else "pear" if count == 1
        else "banana" if count == 0
        else "orange"
)

代码if含义

func _on_body_exited(_body):
	if _body.name == "Bird":
		AudioManager.play("sfx_point")
		GameData.score += 1
		#加分以后通过SceenTree把新的分数更新给所有想接受这个消息的节点
		get_tree().call_group("SCORE","on_score_updated",GameData.score)

在这里便是 if语句首先判断表达式_body.name == "Bird":是否为真。

若为真,便在之后执行。

        AudioManager.play("sfx_point")
		GameData.score += 1
		#加分以后通过SceenTree把新的分数更新给所有想接受这个消息的节点
		get_tree().call_group("SCORE","on_score_updated",GameData.score)

若为假,则不执行以上代码内容。


代码题外话

_body.name == "Bird":

“==”:

这里便是判断经过得分区域的是否是小鸟"bird";

若是小鸟"bird",才执行之后的得分加分。

在这里插入图片描述


调用代码块(一) — 游戏配乐

在这里插入图片描述

extends Node

func play(name : String):
	var sfx = find_node(name)
	if sfx is AudioStreamPlayer:
		sfx.play()

find_node

官网用法


AudioStreamPlayer

官方解释

在这里插入图片描述

其对应意思:在这里便是非定位的播放音频

if sfx is AudioStreamPlayer:  

该功能:通过if语句判断,sfx的节点是音频,便执行sfx.play(),将播放该音频。


代码块含义

extends Node

func play(name : String):
	var sfx = find_node(name)
	if sfx is AudioStreamPlayer:
		sfx.play()

这里便是去寻找对应输入的名字,去寻找对应其播放器进行播放。

AudioManager.play("sfx_point")

总代码块中,便是去通过调用AudioManager.play去执行以上内容,为去寻找对应的sfx_point的音效。若音效文件中,并没有该名称的音效,就不执行其语句。

在这里插入图片描述


调用代码块(二) —游戏得分更新

#GameData.gd
extends Node

var score = 0

func update_record():
	if score > load_record():
		FileHelper.save("user://record.res",score)

func load_record():
	return  FileHelper.read("user://record.res",0)

代码块含义

因此内容,之后会打算进行细分析。

这里就先只说明,其功能是更新数据。

GameData.score += 1 :它对应的数据+1


get_tree()

官方解释

在这里插入图片描述
其该用途便是返回该节点。

在这里插入图片描述
在官网中,对该函数就便有27条搜索记录,也可看出它的应用性广和重要性啦。


Scene Tree

官方解释

与get_tree() 的关系

这里就又回到刚开始去讲解get_Tree()的概念。
在这里插入图片描述
正是通过get_tree()这个函数,才能执行跳转到任某一节点的SceneTree进行跳转。


call_group()

官方解释

在这里插入图片描述


实际应用

在官网中的第一个2D游戏制作中,便应用了这段代码内容
在这里插入图片描述
就算通过回溯调用,进行执行函数操作。

所以在flappy bird中的实际中,即也是这样的理解。


欢迎各位批评指正!!!

那么,再次感谢开发游戏的老王的Godot教程【手把手带你Godot游戏开发 第一弹】零基础入门案例:FlappyBird(教程目录及源代码)

举报

相关推荐

0 条评论