返回介绍

FlappyBird:5.1 无尽水管子滚滚来(一)

发布于 2025-04-26 18:34:23 字数 3875 浏览 0 评论 0 收藏

本章节效果图

步骤

制作 Pipe.tscn
  1. 按照下图的样子,在场景树上新建一棵子树(红框中的内容),“Pipe”是一个 Node2D ,其它节点的名称或前缀即代表其类型

关于 Godot 的碰撞和碰撞检测的使用,请看这几篇文章:
《Godot Engine:5 种碰撞体以及 RigidBody 的 4 种模式》
《Godot Engine:碰撞和碰撞检测的简单实例(RigidBody2D 与 Area2D 碰撞)》
《Godot Engine:碰撞和碰撞检测的简单实例(RigidBody2D 与 StaticBody2D 碰撞)》


在"Pipe"上添加一个名为"Pipe.gd"的脚本

#Pipe.gd
extends Node2D

func _process(delta):
	position += Vector2.LEFT*200.0*delta

运行一下场景

“穿越”一下试试

新建一个名为"Objects"的文件夹

在节点"Pipe"上右键, 将分支保存为场景

有人问到底什么是场景?场景就是保存成文件并且可以重复利用的节点树

把场景保存到新建的"Objects"文件夹中

这时你会发现,原来的节点树“缩成”了一个节点,旁边多了一个场景标识,代表这个节点对应着一个场景

把刚才保存的"Pipe.tscn"文件拖拽到场景里几个,然后运行试试

看!可以重复利用!

PipeManager

我们取得阶段性胜利了,但是不能高兴太早,说好的“无尽水管子滚滚来”,要是每个“水管子”都是这么拖上来的,那么每个 FlappyBird 背后都会有一个累死的程序员。所以我们需要动态的实例化柱子。

继续搭建场景,把刚才拖到场景中的柱子都删掉,像下面这样创建子树(红框中内容),“PipeManager”是一个 Timer
关于 Timer 节点的使用请看这篇文章 《Godot Engine:Timer 节点使用范例》


设置一下 Timer 的参数,详见 《Godot Engine:Timer 节点使用范例》

然后在"PipeManager"节点上添加一个脚本"PipeManager.gd"

#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)#将实例化的结果作为自身的子节点

运行一下

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。