39个版本
0.9.3 | 2023年7月10日 |
---|---|
0.9.0 | 2023年6月25日 |
0.9.0-rc0 | 2023年1月31日 |
0.8.1 | 2022年10月28日 |
0.1.0 | 2016年10月3日 |
#7 in 游戏开发
8,250 每月下载量
用于 42 个Crate (40直接)
435KB
9K SLoC
ggez
这是什么?
ggez 是一个Rust库,旨在轻松创建好游戏。
当前版本是 0.9.3。
更具体地说,ggez 是一个轻量级的跨平台游戏框架,用于以最小的摩擦制作2D游戏。它旨在实现一个基于(LÖVE游戏框架的Rust化版本)的API。这意味着它包含基本的可移植2D绘制、声音、资源加载和事件处理,但更详细的细节和性能特性可能与LÖVE不同。
ggez 并非旨在满足每个人的需求,而是作为构建的坚实基础。因此,它采取了相当全面的方法,不需要为一切可想象的事物添加数百万个附加组件和插件,但也不会指定高级功能,如物理引擎或实体组件系统。相反,目标是让您可以使用您想要的任何库来提供这些功能,或者在自己的库之上构建ggez。
特性
- 文件系统抽象,允许您从文件夹或zip文件中加载资源
- 基于
wgpu
图形API的硬件加速2D渲染 - 通过
rodio
crate 加载和播放 .ogg、.wav 和 .flac 文件 - 使用
glyph_brush
进行TTF字体渲染。 - 通过回调轻松处理键盘和鼠标事件的接口
- 用于定义引擎和游戏设置的配置文件
- 简单的时间测量和FPS测量功能。
- 通过
mint
集成数学库。 - 一些更高级的图形选项:着色器、实例绘制和渲染目标
非功能特性(即如果需要可以从其他地方添加的内容)
支持的平台
- 完全支持:Windows、Linux、MacOS
- 非官方支持但可能仍然可以工作:Android、iOS、Web
有关详细信息,请参阅docs/BuildingForEveryPlatform.md
如果您想现在使用WebAssembly在Android、iOS或Web上运行ggez(目前最高版本为0.7),请查看good-web-game。
谁在使用ggez?
查看项目列表!
使用方法
ggez需要rustc >= 1.42,并在crates.io上分发。要将它包含到项目中,只需将依赖项行添加到您的Cargo.toml
文件中。
ggez = "0.9.3"
ggez由三大部分组成:一个包含与计算机硬件接口所需所有状态的Context
对象,一个用户实现的用于注册事件回调的EventHandler
特质,以及提供实际操作功能的各个子模块,如graphics
和audio
。一般模式是创建一个包含您的游戏数据的结构体,该结构体实现了EventHandler
特质。使用ContextBuilder
或Conf
对象创建一个新的Context
对象,然后使用Context
和您的EventHandler
实例调用event::run()
来运行游戏的主循环。
查看API文档以获取完整文档,或查看示例目录中的各种复杂度的示例。大多数示例展示了一个ggez的特性,而astroblasto
和snake
是小型但完整的游戏。
入门
有关ggez的快速教程,请参阅docs/
目录中的Hello ggez指南。
示例
请参阅源代码中的examples/
目录。大多数示例展示了一个ggez的特性,而astroblasto
是一个小型但完整的类似《小行星》的游戏。
要运行示例,只需检出源代码,在根目录中执行cargo run --example
git clone https://github.com/ggez/ggez.git
cd ggez
cargo run --example 05_astroblasto
如果不起作用,请参阅常见问题解答以获取解决方案。
基本项目模板
use ggez::{Context, ContextBuilder, GameResult};
use ggez::graphics::{self, Color};
use ggez::event::{self, EventHandler};
fn main() {
// Make a Context.
let (mut ctx, event_loop) = ContextBuilder::new("my_game", "Cool Game Author")
.build()
.expect("aieee, could not create ggez context!");
// Create an instance of your event handler.
// Usually, you should provide it with the Context object to
// use when setting your game up.
let my_game = MyGame::new(&mut ctx);
// Run!
event::run(ctx, event_loop, my_game);
}
struct MyGame {
// Your state here...
}
impl MyGame {
pub fn new(_ctx: &mut Context) -> MyGame {
// Load/create resources such as images here.
MyGame {
// ...
}
}
}
impl EventHandler for MyGame {
fn update(&mut self, _ctx: &mut Context) -> GameResult {
// Update code here...
Ok(())
}
fn draw(&mut self, ctx: &mut Context) -> GameResult {
let mut canvas = graphics::Canvas::from_frame(ctx, Color::WHITE);
// Draw code here...
canvas.finish(ctx)
}
}
实现细节
ggez基于winit
构建窗口和事件,rodio
构建声音,并使用wgpu
实现了2D绘图引擎。它是完全线程安全的(尽管平台限制意味着事件处理循环和绘图必须在主线程中完成),并且可移植到Windows和Linux。
ggez是纯Rust™。
帮助!
信息来源
如果您仍有问题或疑问,请随时提问!最简单的方法是
- 在GitHub问题跟踪器上创建一个问题
- 在我们新的Discord服务器上打个招呼(点击加入)
- 或者向非官方Rust Discord服务器、Rust Gamedev服务器或good-web-game Discord服务器上的智者提问
许可:MIT
依赖
~18–57MB
~1M SLoC