#2d-game #2d-graphics #2d #graphics #game-engine #graphics-api #game-state

coffee

一个以简洁、明确和类型安全为特点的偏见2D游戏引擎

9个不稳定版本

0.4.1 2020年5月10日
0.4.0 2020年4月25日
0.3.2 2019年9月1日
0.3.1 2019年6月20日
0.0.0 2019年4月2日

730游戏开发

Download history 218/week @ 2024-03-11 64/week @ 2024-03-18 52/week @ 2024-03-25 120/week @ 2024-04-01 55/week @ 2024-04-08 65/week @ 2024-04-15 79/week @ 2024-04-22 62/week @ 2024-04-29 41/week @ 2024-05-06 43/week @ 2024-05-13 47/week @ 2024-05-20 41/week @ 2024-05-27 46/week @ 2024-06-03 33/week @ 2024-06-10 41/week @ 2024-06-17 45/week @ 2024-06-24

每月170次下载

MIT 许可证

345KB
7.5K SLoC

咖啡

Integration status Documentation Crates.io License Gitter chat

一个针对 Rust 的偏见2D游戏引擎,专注于简洁、明确和类型安全。

咖啡正处于非常早期的开发阶段。许多基本功能仍然缺失,一些依赖项是实验性的,并且可能存在许多错误。请自由贡献!

功能

更多功能!查看示例以查看其作用。

使用

coffee 添加为您的 Cargo.toml 中的依赖项,并启用图形后端功能(openglvulkanmetaldx11dx12

coffee = { version = "0.4", features = ["opengl"] }

Rust 在调试模式下相当慢。如果您在绘制数百个精灵时遇到性能问题,请启用您的 Cargo.toml 中的编译器优化。我推荐使用2级优化以保持与 --release 性能更接近

[profile.dev]
opt-level = 2

咖啡发展迅速,master 分支可能包含破坏性更改!如果您想了解特定版本,请查看版本列表

概述

以下是一个打开窗口的最小示例

use coffee::graphics::{Color, Frame, Window, WindowSettings};
use coffee::load::Task;
use coffee::{Game, Result, Timer};

fn main() -> Result<()> {
    MyGame::run(WindowSettings {
        title: String::from("A caffeinated game"),
        size: (1280, 1024),
        resizable: true,
        fullscreen: false,
        maximized: false,
    })
}

struct MyGame {
    // Your game state and assets go here...
}

impl Game for MyGame {
    type Input = (); // No input data
    type LoadingScreen = (); // No loading screen

    fn load(_window: &Window) -> Task<MyGame> {
        // Load your game assets here. Check out the `load` module!
        Task::succeed(|| MyGame { /* ... */ })
    }

    fn draw(&mut self, frame: &mut Frame, _timer: &Timer) {
        // Clear the current frame
        frame.clear(Color::BLACK);

        // Draw your game here. Check out the `graphics` module!
    }
}

浏览文档示例以了解更多信息!

实现细节

咖啡基于

  • winit 进行窗口和鼠标/键盘事件。
  • gfx pre-ll 用于OpenGL支持,基于 ggez 代码库。
  • wgpu 用于实验性的Vulkan、Metal、D3D11和D3D12支持。
  • stretch 用于基于Flexbox的响应式GUI布局。
  • glyph_brush 用于TrueType字体渲染。
  • gilrs 用于游戏手柄支持。
  • nalgebra 用于PointVectorTransformation类型。
  • image 用于图像加载和纹理数组构建。

贡献 / 反馈

我对Rust、系统编程和计算机图形学都很新手。我在开发我目前正在开发的游戏引擎的过程中边学边做。我总是很高兴从任何人那里学习。

如果您想做出贡献,非常欢迎您成为项目的一部分!如果您想找到一些可以工作的东西,请查看当前的 问题。先尝试分享您的想法!如果您想讨论新想法,请随时打开一个新的问题。

欢迎任何形式的反馈!您可以在 Rust社区Discord#games-and-graphics 频道中找到我(以及一群很棒的人)。我在那里的昵称是 @lone_scientist

致谢 / 感谢

  • ggez,一个很棒、易于使用、功能强大的游戏引擎,它让我了解了Rust。它的图形实现为我提供了为Coffee实现OpenGL支持的指南。
  • Kenney,无附带条件提供免费游戏资源的创造者。Coffee内置的GUI渲染器使用了他们UI精灵的修改版。

依赖项

~23–36MB
~448K SLoC