https://github.com/unacro/godot-first-demo
https://github.com/unacro/godot-first-demo
Last synced: 3 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/unacro/godot-first-demo
- Owner: unacro
- License: mit
- Created: 2022-01-05T15:33:43.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2022-01-06T10:55:27.000Z (over 3 years ago)
- Last Synced: 2025-01-21T12:47:27.414Z (5 months ago)
- Language: GDScript
- Size: 1.96 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Fox Fight Bats
初次学习 Godot 的练习项目,2D 像素风格 ARPG 游戏 Demo(单场景)。
## 参考资料
- 《[Game Programming Patterns](http://gameprogrammingpatterns.com/)》([中文版 - 游戏编程模式](https://gpp.tkchu.me/))
- 《[Godot Docs](https://docs.godotengine.org/)》([中文版 - Godot 官方文档](http://godot.pro/doc/index.html))## 项目引用
- [本杰明\(HeartBeast\)的视频教程 - Youtube](https://youtu.be/mAbG8Oi-SvQ)
- [素材来源 - GitHub](https://github.com/uheartbeast/youtube-tutorials)## 实现
### Features
- [x] 支持闲置(Idle)、移动(Move)、攻击(Attack)、翻滚(Roll)四种状态的「有限状态机」(Finite State Machine)
- [x] 以及与四方向动作对应的动画(用 `AnimationTree` 节点的 `BlendSpace2D` 实现)
- [x] 支持八向动作(移动、翻滚、攻击),具有加速度、减速(模拟摩擦)等简单物理效果
- [x] 基于 `YSort` 节点实现自动排序重叠时的优先显示区域(站在树前显示玩家,站在树后显示树)
- [x] 基于 `Autotile` 自动完成场景地形连接切换显示细节,不可通过的地形使用碰撞箱 `Collision` 实现
- [x] 基于碰撞箱实现 `hitbox` 和 `hurtbox` 来检测伤害判定
- [x] 基于碰撞箱实现的可交互(被破坏)地形(杂草)
- [x] 漂浮在空中具有待机动画的小怪,能够检测并追踪玩家,被攻击时具有击退效果,死亡时有动画
- [x] 玩家和小怪都具有动态计算的血量和受击反馈动画
- [x] 玩家血量显示到 HUD
- [x] 小怪之间的软碰撞(`Soft Collision`,本质是当碰撞箱重叠时,提供一个向量将另一个物体推出去,用来防止复数同类物体重叠在一起)
- [x] 跟随玩家位置的平滑镜头
- [x] 小怪游荡状态(巡逻路径),玩家脱离仇恨(离开检测范围)后自动返回游荡地点
- [x] 攻击(Swipe)、翻滚(Evade)、击中(Hit)、击杀(EnemyDie)、受伤(Hurt)的音效
- [x] 基于着色器(`Shader`)实现的(敌我双方)受击闪烁特效(用来提示无敌帧)
- [x] 翻滚时添加隐藏(不闪烁)的无敌帧
- [x] 基于「`Node` 节点无位置信息的特性」和「用脚本指定 `Camera2D` 节点的 `Limit`」实现的可快速编辑的镜头限制
- [x] 带音效可随时开关的暂停功能,可选择返回标题界面
- [x] 简单的标题界面,平滑(渐入渐出)的场景切换
- [x] 死亡时弹出 Game Over 画面,点击按钮或 Esc 可以回到标题画面
- [x] 用「Aseprite」照着项目的 heart 素材临摹了一个 icon 图标
- [ ] 标题界面支持按键切换选项,并提供音效
- [ ] 清关庆祝提示
- [x] 添加循环 BGM
- [x] 引入 Game Manager 全局单例(Singleton)来管理游戏状态机,重构开始,结束,暂停,回到游戏等实现
- [x] 利用 `Engine.time_scale` 和 `AudioServer.global_rate_scale` 以及补间(`Tween`)节点实现自然渐变的子弹时间(bullet time)效果
- [x] 继续补间(`Tween`)节点给子弹时间添加渐变的镜头缩放(`zoom`)效果
- [ ] 优化无敌帧实际运算判定细节### Bugs
- [ ] 移动结束后人物会轻微抖动,初步推测是速度向量停止后没有对齐像素
- [x] ~~有时中途退出再重新进入游戏后移动时镜头会抽搐~~ 修好出错的暂停状态后莫名其妙消失了