谢夏戈 @ xiexiage.com

替换美术资源

May 12

到目前为止小鸟还是 Godot 的"机器人头",水管也是个矩形 — 这一章给游戏换上真正的美术资源,从「白板原型」一秒变成「真游戏」。✨

我们要做:

  1. 准备 + 导入美术素材
  2. 替换小鸟、水管的精灵图
  3. 加上滚动的地面和背景(这是 Flappy Bird "横向飞行错觉"的灵魂)

准备美术资源

我用的素材来源:TODO 素材链接

你也可以自己画、或者从这些免费站找:

需要这几样:

  • bird.png — 小鸟(推荐 3 帧动画,扑翅膀更生动)
  • pipe.png — 水管
  • ground.png — 地面
  • background.png — 背景(最好做成左右无缝拼接的)

07-art-assets-素材

导入设置:像素美术别变模糊

.png 文件拖进 Godot 项目,默认导入会用双线性插值把像素图变得模糊糊的,这不是我们要的复古感觉。

⚠️ 像素美术必须把 Filter 设为 Nearest

选中图片资源 → 上方【导入】标签页 → Compress / Mode = Lossless + Filter 设为 Nearest → 点击「重新导入」。

07-art-assets-导入设置

或者一劳永逸:项目设置 → 渲染 → 纹理 → Canvas Textures > Default Texture Filter = Nearest,整个项目所有图片都默认 Nearest。

替换小鸟

打开 bird.tscn,选中 Sprite2D 节点,把它的 Texture 换成 bird.png

07-art-assets-小鸟替换

碰撞体也要对应调整:选中 CollisionShape2D,把矩形缩放到正好包住新的小鸟图。

💡 小贴士:碰撞体可以略小于图片(特别是小鸟)。这样玩家会觉得"我明明擦边过去了"的判定更宽容,手感更好。这是 Flappy Bird 类游戏的隐藏秘诀之一。

(可选)小鸟扑翅膀动画

如果你的 bird.png 是 3 帧的 sprite sheet,可以把 Sprite2D 换成 AnimatedSprite2D,然后用 SpriteFrames 资源做帧动画。这部分稍微进阶一点,你可以先跳过 — 不影响后续。

替换水管

打开 pillar_pair.tscn,选中两个 Sprite2D(上下水管),把它们的 Texture 都换成 pipe.png

07-art-assets-水管替换

上水管要垂直翻转(在 Inspector 里勾选 Flip V)。

碰撞体同样调整到包住水管的大小。

滚动地面 + 背景(重头戏 🎬)

Flappy Bird 的精髓 — 小鸟其实在原地扑腾,背景和地面在向左移动,制造出"鸟在向右飞"的错觉。

Godot 4.3+ 有专门的 Parallax2D 节点,自带 autoscroll(自动滚动)和 repeat(无缝循环),非常好用。

添加滚动背景

main.tscn 的根节点下添加:

  • Parallax2D(重命名 BG
    • Sprite2DTexture 设为 background.png

07-art-assets-背景节点

选中 BG,在 Inspector 里设置:

属性作用
Autoscroll > x-50(或你喜欢的速度)每秒向左移动多少像素
Repeat Size > x背景图宽度让它无缝循环
Repeat Times3 或更大重复多少次(保证屏幕外有备用)

负值表示向左滚动;正值表示向右。

添加滚动地面

同样的方式,加一个 Parallax2D(重命名 Progress):

  • Parallax2DProgress
    • Sprite2DTexture 设为 ground.png

Autoscroll.x 可以比背景快(比如 -150),制造"近景快、远景慢"的视差感(这就是 Parallax 这个词的来源)。

07-art-assets-地面节点

💡 这两个节点的 z-index 注意一下:背景 BG 要在最底层(z 最小),地面 Progress 在小鸟之上(z 最大,遮住可能的视觉穿帮)。

让背景在游戏结束时停下来

还记得 上一章 main.gd 里这两行吗?

func _on_game_state(new_state) -> void:
    if new_state == GameManager.GameState.GAME_OVER:
        $BG.autoscroll.x = 0
        $Progress.autoscroll.x = 0

它做的就是:游戏结束时把背景/地面的滚动速度设为 0。这样画面整体定住,更有"撞死"的仪式感。

测试运行

现在游戏应该长这样:

  • ✅ 真正的小鸟在画面里扑腾
  • ✅ 水管是绿色(或你的素材颜色)的管子
  • ✅ 背景缓缓向左滚动 + 地面快速向左滚动 → 视差错觉
  • ✅ 撞死瞬间,背景立刻定住

07-art-assets-效果

是不是一瞬间像个游戏了?🎮

下一章给它加上音效 — 翅膀扇动、得分、碰撞,最后一点"灵魂"。

2023-PRESENT © 谢夏戈