Box2D Flutter 滑块拼图
这是我提交给2022 Flutter Puzzle Hack的参赛作品。
它使用了Box2D物理引擎,创造了一种有趣的玩法机制,你需要的不仅仅是一个简单的滑块。代码全部是纯Flutter,包含小部件、动画和CustomPaint。它不使用任何Flutter游戏引擎。
目标是将粒子填满容器,以便能看到容器的编号。然后完成正常的滑块拼图?。
需要更多粒子?按下**RAIN**按钮,让它下雨。但要小心。每次你都会受到时间惩罚。
极客工具?
自己动手玩转游戏的物理效果。设置球体和盒子的重量和弹性。改变重力。控制整个世界。
入门
克隆仓库
git clone https://github.com/funwithflutter/flutter_slide_puzzle
创建平台文件夹
flutter create
然后针对你想要的平台运行flutter run。在调试模式下,Flutter Web的性能不是很好。桌面版效果很好。移动版应该也没问题?。
资源
下面我分享一些帮助我制作这个游戏的资源。如果社区有足够大的兴趣,我很乐意通过YouTube视频或文章进一步阐述?。
处理Box2D逻辑/绘图的一些逻辑也可能值得提取到一个单独的包中。
基础逻辑
Very Good Ventures制作的基础示例是一个很好的起点,大量代码被用作此应用程序的起点。他们制作了各种教程和其他资源来解释他们的实现。
状态管理
我选择使用Riverpod进行状态管理,因为Riverpod很棒?,而且我熟悉它。不幸的是,我没有足够的时间清理所有东西,有时为了完成游戏,我选择了“ hacky ”的方法。
Box2D
Box2D是一个用于游戏的2D刚体模拟库。程序员可以在他们的游戏中使用它,让对象以逼真的方式移动,并使游戏世界更具互动性。从游戏引擎的角度来看,物理引擎只是一个程序化动画系统。
总的来说,你可以创建一个“物理”**世界**,向其中添加**物体**,让这些物体与物理力(如重力和碰撞)相互作用。
作为一名Flutter开发者,我必须使用Flutter小部件和绘图在屏幕上表示这个**世界**信息。
以下是此存储库中一些值得关注的文件
- box2d_flutter.dart – 一个使处理Box2D世界更容易的类。它包含将**像素尺寸**与**世界尺寸**相互转换的方法。将“物理世界”中的内容提取出来,并在具有特定尺寸的屏幕上表示出来。
- box2d_paint_debug.dart – 在开发早期阶段,用于使用Flutter的
CustomPaint绘制世界对象。这个类可以大大扩展,作为包使用。 - puzzle_paint.dart – 使用上述两个文件中的逻辑或类似逻辑,将盒子和球体绘制到屏幕上。
物理
如果你想深入了解更多物理知识,我强烈推荐The Nature of Code,特别是关于Physics Libraries的部分,我的很多代码都受到了它的启发,并且它帮助我理解了如何使用Box2d。
box2d_controller.dart 和 box2d_state.dart 文件将上述信息整合到了一个Flutter应用程序中。
设计
有时我能设计,有时我不能。这次就是我不能的时候。
我从以下Dribbble设计中获得了极大的灵感,该设计由Lia制作。
经过大量的尝试,才让屏幕上的所有组件都能很好地调整大小并协同工作(并尽可能准确地表示Box2D世界)。如果我自己说的话,最终结果还不错。

