实体与组件
Crafty 采用基于组件的架构,游戏中的每个对象都是一个实体,通过添加不同的组件来赋予其能力(如 2D 渲染、DOM 显示、颜色、碰撞检测等)。这种设计实现了干净且解耦的代码组织方式,无需使用继承。
miniprogram · fastwego/miniprogram
这是一个用 Go 语言编写的微信小程序/小游戏开发 SDK,仓库名为 fastwego/miniprogram,主题标签涵盖 fastwego、minigame、miniprogram、wechat、weixin。需要说明的是,仓库提供的 README 摘录内容实际是 Crafty JS 游戏库的介绍,与 Go...
Crafty 是一个纯 JavaScript 编写的游戏库,旨在帮助开发者以结构化的方式创建游戏。它不依赖任何特定的渲染后端,而是通过实体(Entity)与组件(Component)的组合来组织游戏元素,避免了复杂的继承体系。Crafty 内置了事件绑定系统,开发者无需手动操作 DOM 或编写自定义的绘制例程,即可快速搭建游戏原型。
根据 README 的描述,Crafty 可以在所有主流浏览器中运行,并且能够与其它 JavaScript 库(如 jQuery、Underscore 等)结合使用。社区提供了论坛支持以及不断增长的社区模块集合,方便开发者扩展功能。
Crafty 采用基于组件的架构,游戏中的每个对象都是一个实体,通过添加不同的组件来赋予其能力(如 2D 渲染、DOM 显示、颜色、碰撞检测等)。这种设计实现了干净且解耦的代码组织方式,无需使用继承。
Crafty 提供了灵活的事件系统,可以随时触发和绑定自定义事件。例如,在 Pong 示例中,通过 `bind('UpdateFrame', ...)` 来更新球的位置,通过 `onHit('Paddle', ...)` 来处理碰撞事件。
Crafty 抽象了底层的 DOM 操作和绘制流程,开发者只需关注游戏逻辑本身。
Crafty 不依赖任何“魔法”,完全用 JavaScript 编写,兼容主流浏览器,并且可以与其他 JS 库共存。
Crafty 拥有活跃的社区论坛,以及由用户贡献的模块集合,这些模块可以进一步扩展引擎的功能。
Crafty 欢迎社区贡献。如果你想要修复 bug,请向开发分支(development branch)提交 pull request。更多指南可以在项目的 wiki 中找到。对于较大的贡献,建议先在论坛中与维护者沟通,以便获得指导。
构建 Crafty 最简单的方式是使用 Grunt.js,这需要预先安装 Node.js 和 npm。在 Crafty 根目录下运行 npm install 安装依赖(大约会下载 30MB 的 Node 包),然后运行 grunt 即可完成构建。你也可以使用 yarn 代替 npm。更详细的构建说明可以在 wiki 的 Building 页面找到。
README 中提供了一个简单的 Pong 游戏示例,展示了 Crafty 的基本用法:
Crafty.init(600, 300);
Crafty.background('rgb(127,127,127)');
// 创建两个挡板
Crafty.e("Paddle, 2D, DOM, Color, Multiway")
.color('rgb(255,0,0)')
.attr({ x: 20, y: 100, w: 10, h: 100 })
.multiway(200, { W: -90, S: 90 });
Crafty.e("Paddle, 2D, DOM, Color, Multiway")
.color('rgb(0,255,0)')
.attr({ x: 580, y: 100, w: 10, h: 100 })
.multiway(200, { UP_ARROW: -90, DOWN_ARROW: 90 });
// 创建球
Crafty.e("2D, DOM, Color, Collision")
.color('rgb(0,0,255)')
.attr({ x: 300, y: 150, w: 10, h: 10,
dX: Crafty.math.randomInt(2, 5),
dY: Crafty.math.randomInt(2, 5) })
.bind('UpdateFrame', function () {
// 碰撞逻辑
})
.onHit('Paddle', function () {
this.dX *= -1;
});
// 创建计分板
Crafty.e("LeftPoints, DOM, 2D, Text")
.attr({ x: 20, y: 20, w: 100, h: 20, points: 0 })
.text("0 Points");
Crafty.e("RightPoints, DOM, 2D, Text")
.attr({ x: 515, y: 20, w: 100, h: 20, points: 0 })
.text("0 Points");
该示例中,左挡板由 W 和 S 键控制,右挡板由方向键 UpArrow 和 DownArrow 控制。README 还提供了在线试玩的链接,方便开发者直接修改和体验。
Crafty 适合希望以结构化方式学习 JavaScript 游戏开发的初学者和中级开发者。通过实体-组件模式,可以理解如何将游戏对象解耦为可复用的模块。建议从 README 中的 Pong 示例入手,逐步尝试添加更多组件(如动画、音频、粒子等),并参考社区模块来扩展功能。由于 Crafty 是纯 JavaScript 库,熟悉 JavaScript 基础语法和事件模型将有助于快速上手。
jfduke3d 是 JonoF 对 3D Realms《Duke Nukem 3D》的源码移植,基于其 Build...
id Software 以 GPL 许可证发布的《雷神之锤3竞技场》(Quake III Arena)源...
id Software 于 2012 年 2 月 6 日发布的《德军总部 3D》原始 PC 版源码存档...