这周用godot做一个flappy bird,也可以说是抄一个。

抄了个github的库,但是是3.5的,我用都是master,现在是4.0alpha版本。代码有一些不一样的地方,改改就完事了。

资产

分析一下,我们有鸟,水管,和ui里的开始按钮,所以flappy bird很容易做。

ui

一般游戏都有一个ui界面,至少是个开屏。

这里有一个hud界面,hud是head up display,这里可以理解为在游戏场景内的ui,就比如血条这种东西。

主界面和背景

主节点自定义取名为world节点,是一个没什么意义的 Node2D ,然后创建一个background作为背景的scene。

background是一个 CanvasLayer ,很好理解的,就是一个2d幕布。表示是从2d开始搭积木做的游戏。

这是第一个node,一个node可以设置成是场景,这样会多一个打板卡的标记,也可以加上一个脚本,多一个卷轴的标记。

CanvasLayer 是一个抽象的节点,本身没什么功能,在下面创建一个 Sprite2D 然后把图片拖到纹理上去,就行了。

scene就是一坨node,其实和原来的树区别也不大,但是有单独的场景文件tscn。和场景这个词没什么关系,就是一些node的看上去面向对象的封装,封装了动画和逻辑等等。

2d游戏也有摄像头,叫 Camera2D ,可以理解为一个canvas上的截图管理。主要还是在background上画。

项目设置到应用,场景里可以设置主场景。

游戏界面

游戏的时候有一个鸟,有很多水管,地面,飞行距离的hud显示等等。

所以原来的作者把这些也做成了scene。

鸟是一个 RigidDynamicBody2D ,顾名思义,是一个可动的刚体。它可以和水管计算碰撞。

水管是一个 StaticBody2D ,这里的静态不是编程里的静态,而是他真的静态,相对于鸟的动态。当然这个也有碰撞。

地面是一个 Node2D ,他要播动画,挺麻烦的。

hud也是一个 CanvasLayer ,在hud上面可以摆放按钮,显示什么的,其实有按钮就不是hud了。

gameplay

逻辑上 上下运动,获取点击事件起飞,判定碰撞。

动画上 脸朝向,上上下下

水管和地面

逻辑上 生成,向左运动

动画上 向左运动

这么一看就很简单了