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 在 游戏开发
每月170次下载
345KB
7.5K SLoC
咖啡
一个针对 Rust 的偏见2D游戏引擎,专注于简洁、明确和类型安全。
咖啡正处于非常早期的开发阶段。许多基本功能仍然缺失,一些依赖项是实验性的,并且可能存在许多错误。请自由贡献!
功能
- 响应式、可定制的GUI
- 声明式、类型安全的加载屏幕,带有进度跟踪
- 内置调试视图和性能指标
- 固定、确定的时间步长
- 显式、易于使用、硬件加速的2D图形API
- 利用OpenGL、Vulkan、Metal、D3D11和D3D12的多平台支持
- 显式且高效的批量绘制
- 网格支持
- 纹理数组支持
- 离屏渲染
- TrueType字体渲染
- 手柄支持
更多功能!查看示例以查看其作用。
使用
将 coffee
添加为您的 Cargo.toml
中的依赖项,并启用图形后端功能(opengl
、vulkan
、metal
、dx11
或 dx12
)
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
用于Point
、Vector
和Transformation
类型。image
用于图像加载和纹理数组构建。
贡献 / 反馈
我对Rust、系统编程和计算机图形学都很新手。我在开发我目前正在开发的游戏引擎的过程中边学边做。我总是很高兴从任何人那里学习。
如果您想做出贡献,非常欢迎您成为项目的一部分!如果您想找到一些可以工作的东西,请查看当前的 问题。先尝试分享您的想法!如果您想讨论新想法,请随时打开一个新的问题。
欢迎任何形式的反馈!您可以在 Rust社区Discord 的 #games-and-graphics
频道中找到我(以及一群很棒的人)。我在那里的昵称是 @lone_scientist
。
致谢 / 感谢
依赖项
~23–36MB
~448K SLoC