探索游戏开发新境界:Xelmish - XNA与Elmish的完美结合!
在寻找一种融合现代前端架构和经典游戏引擎的游戏开发解决方案吗?Xelmish 是一个巧妙的项目,它将 XNA(通过 Mono Game)的渲染能力和 Elmish 的模型-视图-更新(MVU)架构相结合,为您提供了一个全新的F#游戏开发体验。
Xelmish 提供了一种定制的setState
方法,让您的 Elmish 应用程序可以直接与 XNA 游戏循环交互。通过这种方式,您可以在享受 Elm 架构的强大功能时,利用 XNA 进行高效的游戏渲染。对于已经拥有 Elmish 应用程序的开发者来说,只需简单修改视图函数即可将其转化为 Xelmish 项目。
为了使用 Xelmish,您的 Elmish 程序需要提供一个返回 'viewables' 列表的视图函数,这些函数接收一个 XNA 的 SpriteBatch
对象。Xelmish 提供了一个名为 Viewables
的辅助模块,其中包含了如颜色、图像和文本等常见视图元素。
Xelmish 专注于 2D游戏 开发,利用 SpriteBatch
实现纹理绘制而非复杂的顶点渲染,为快速开发提供了可能。现在,就让我们一起探索这个项目的魅力吧!
最新消息:Xelmish 已经上架 Nuget 这里
更新: 项目已升级到.NET 5,并且最近又升级到了.NET 6,同时也更新了 MonoGame 版本。
使用示例
要理解 Xelmish 如何工作,可以从最简单的示例项目开始:xelmish-first。这个例子会在屏幕上显示一个可移动和调整大小的正方形,无需加载任何外部资源,非常适合初学者。
更多逐渐进阶的示例,请查看样品部分的说明,它们将引导您逐步掌握 Xelmish 的核心概念。
需要注意的是,由于 Xelmish 基于 MonoGame,因此您最终需要了解 MonoGame 内容管道。官方文档是学习的好地方:Monogame 官方文档。
开发信息
Xelmish 由Visual Studio Community 2017和2019进行开发,兼容各种Windows 10系统。根目录下的解决方案文件可供使用Visual Studio的开发者使用。不过,该项目完全支持命令行编译和其他IDE。
Xelmish 使用纯.NET 2.2开发,但已无问题地升级到.NET 5。因此,您需要安装.NET 5 SDK才能构建。此外,Xelmish 和其示例已经在 Windows 10、Mac OS X 和 Ubuntu 18 上进行了测试。
注意: 即使使用了.NET 5 和 MonoGame 3.8,为了解决内容构建器的问题,我仍需安装.Net Core 3.1。希望未来版本能解决这个问题。
Linux 构建者请注意
在 Linux 上,如果没有安装 mono-complete,例如 sudo apt install mono-complete
,Monogame 内容管道可能会出现问题。同时,也需要安装.NET 5 SDK 才能编译 Xelmish 和示例。
样品描述
在 /samples
目录下,有多个使用 Elmish 和 Xelmish 的项目,按照复杂度递增顺序排列:
-
Xelmish-first 最基础的示例,只展示如何在屏幕显示一个颜色块并实现基本操作。
-
Simple-Counter 类似其他 Elmish 项目的“Hello World”,但使用 Xelmish 视图。
-
Sub-Model 包含两个子组件(每个都有计数器和时钟)的应用,展示了多组件结构的使用。
-
Tetris-Clone 高度仿真的俄罗斯方块游戏,使用多个 Elmish 组件来处理不同屏幕状态。
-
Space-Invaders-Clone 模仿经典的太空入侵者的游戏,包含了更复杂的事件处理、动画和独立实体,展现了 Elmish 在处理这种复杂场景下的表现。
背景与动机
Xelmish 旨在参加 2019 年 F# 应用比赛,同时也是对我的旧实验引擎 fsharp-gamecore 的替代方案。虽然 Xelmish 并未赢得比赛,但我的另一个作品赢得了奖项。完整结果可以在这里查看:F# Foundation 结果。
随着游戏复杂性的增加,我发现以前简单的游戏core架构变得越来越难以维护,模型和视图之间的边界开始模糊。相比之下,经过实战检验的 Elmish 架构让我体会到了优雅的代码组织,以及更好地实现了我期望的功能性游戏设计和引擎无关的目标。
许可证
Xelmish 采用 MIT 许可证发布。如有任何问题,请联系我。另外,许多样例项目使用的字体都遵循 SIL 开放字体许可协议,在解决方案根目录中可以找到许可协议副本。
致谢
所有在此仓库中的内容均由我独自创建,以符合比赛要求。然而,Xelmish 引用了 @et1975 及其他人创建的 Elmish 库。正是 Elmish 的易用性启发了 Xelmish 的诞生。同样,从 Elmish.WPF 中我也学到了很多,还有 @MangelMaxime 的精彩文章:“我在使用 Elmish 的过程中的一些心得”("My tips for working with Elmish",帮助我更好地理解和运用 Elmish。
准备好踏上一场游戏开发的新旅程了吗?Xelmish 就在这里等待着您!