39个版本

0.9.3 2023年7月10日
0.9.0 2023年6月25日
0.9.0-rc02023年1月31日
0.8.1 2022年10月28日
0.1.0 2016年10月3日

#7 in 游戏开发

Download history 1836/week @ 2024-05-01 1923/week @ 2024-05-08 1945/week @ 2024-05-15 2128/week @ 2024-05-22 2210/week @ 2024-05-29 1772/week @ 2024-06-05 1444/week @ 2024-06-12 1816/week @ 2024-06-19 1538/week @ 2024-06-26 330/week @ 2024-07-03 1488/week @ 2024-07-10 1760/week @ 2024-07-17 1866/week @ 2024-07-24 1743/week @ 2024-07-31 2531/week @ 2024-08-07 1867/week @ 2024-08-14

8,250 每月下载量
用于 42 个Crate (40直接)

MIT 许可证

435KB
9K SLoC

ggez

ggez logo

这是什么?

Build status Docs Status license Crates.io Crates.io Discord chat

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特质,以及提供实际操作功能的各个子模块,如graphicsaudio。一般模式是创建一个包含您的游戏数据的结构体,该结构体实现了EventHandler特质。使用ContextBuilderConf对象创建一个新的Context对象,然后使用Context和您的EventHandler实例调用event::run()来运行游戏的主循环。

查看API文档以获取完整文档,或查看示例目录中的各种复杂度的示例。大多数示例展示了一个ggez的特性,而astroblastosnake是小型但完整的游戏。

入门

有关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™。

帮助!

信息来源

  • 常见问题和问题的答案可以在FAQ中找到。
  • API文档中解释了很多设计内容。
  • 查看示例

如果您仍有问题或疑问,请随时提问!最简单的方法是

许可:MIT

依赖

~18–57MB
~1M SLoC