dart_realtime_game

使用 Dart 和 Flutter 构建实时游戏的示例。

在全栈中使用 Dart,在客户端和服务器之间共享代码。

使用实体组件系统来管理游戏和网络传输。

我还没有(或者说尚未)实现客户端插值或预测,因此客户端仅在服务器更新推送时更新(目前每秒 10 次)。

这没有使用任何“游戏”框架,而是直接绘制到画布上。我发现大多数游戏框架没有将状态与渲染分离,所以我选择编写自己的(非常简单的)渲染层。

用法

本地开发

melos bootstrap # runs pub get for all packages

cd packages/server
dart run bin/serve.dart


cd packages/client
flutter run

我通常从终端运行服务器,从 VS Code 运行客户端。

本地构建 Docker 文件

docker build -f .\dockerfiles\frontend.Dockerfile -t frontend . 
docker build -f .\dockerfiles\backend.Dockerfile -t backend .

已知问题

  • 服务器在热重载时会泄露 2 个 PhysicsComponents。
  • 服务器在玩家掉线时会泄露玩家连接(留下僵尸)。
  • 即使没有玩家连接,服务器也会旋转。

我的 TODO 列表中剩余的项目(目前未计划进一步开发)

  • 使渲染层从 GameState 进行插值。
  • 删除所有 DateTime.now() 的使用,并将 clientTime 移至 Duration。
  • 唯一可以访问 clientTime 的方式是通过 tick 回调的 elapsed。
  • 让 WebSockets 自动重新连接。
  • 鼠标单击时绘制动画。
  • 添加玩家互相伤害的能力。
  • 修复渲染以围绕位置居中绘制。
  • 设置颜色和名字的能力。
  • 通过按键/按钮触发的能力。
  • 改变某些事物的拾取物/增益。
  • 添加数据库来存储服务器状态。
  • 让渲染更花哨(例如,行走周期)
  • 添加背景图块(例如森林)
  • 切换到 3d 前端。

灵感来源

GitHub

查看 Github