这周用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
鸟
逻辑上 上下运动,获取点击事件起飞,判定碰撞。
动画上 脸朝向,上上下下
水管和地面
逻辑上 生成,向左运动
动画上 向左运动
这么一看就很简单了