文章目录
总代码块
#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(教程目录及源代码)