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 · Rust 包仓库 1836/week @ 2024-05-01 · Rust 包仓库 1923/week @ 2024-05-08 · Rust 包仓库 1945/week @ 2024-05-15 · Rust 包仓库 2128/week @ 2024-05-22 · Rust 包仓库 2210/week @ 2024-05-29 · Rust 包仓库 1772/week @ 2024-06-05 · Rust 包仓库 1444/week @ 2024-06-12 · Rust 包仓库 1816/week @ 2024-06-19 · Rust 包仓库 1538/week @ 2024-06-26 · Rust 包仓库 330/week @ 2024-07-03 · Rust 包仓库 1488/week @ 2024-07-10 · Rust 包仓库 1760/week @ 2024-07-17 · Rust 包仓库 1866/week @ 2024-07-24 · Rust 包仓库 1743/week @ 2024-07-31 · Rust 包仓库 2531/week @ 2024-08-07 · Rust 包仓库 1867/week @ 2024-08-14 · Rust 包仓库

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