2个版本

0.3.1 2023年5月31日
0.3.0 2023年5月22日
0.2.9 2023年5月11日
0.2.8 2023年4月30日
0.1.6 2023年3月28日

#1073 in 游戏开发

Download history 10/week @ 2024-03-09 4/week @ 2024-03-16 75/week @ 2024-03-30 23/week @ 2024-04-06 1/week @ 2024-04-20 1/week @ 2024-04-27 1/week @ 2024-05-18

87 每月下载量

MIT 许可证

46KB
974

Ellipsoid

Ellipsoid是一个专为以简单高效的方式创建2D游戏而设计的Rust图形库。它提供了一系列功能,包括窗口管理、渲染、输入处理、形状操作和变换。

与其他Rust框架(如ggezmacroquad)相比,ellipsoid在形状创建和操作方面表现出色。此外,通过enums内置了纹理支持,这比使用例如HashMap要安全得多。

如果您计划在这个框架中构建游戏,您应该预计会遇到障碍,并且在某些时候您可能需要分叉或为项目做出贡献,因为一些相关功能仍然缺失。

入门

要开始使用Ellipsoid库,将其作为依赖项添加到您的Cargo.toml中,同时添加您喜欢的异步运行时和strum。

然后只需从ellipsoid::prelude模块导入所有重要内容。

[dependencies]
ellipsoid = "0.3"

async-std = "1.12.0"
strum = { version = "0.24.1", features = ["derive"] }
use ellipsoid::prelude::*;

主要组件

App特质

App特质由主应用程序结构体实现。此特质提供了创建应用程序新实例、处理输入事件、更新应用程序状态和绘制几何图形的方法。

图形

Graphics结构体负责处理渲染和窗口。它允许用户添加自定义几何图形并将其绘制到屏幕上。

形状

Shape是一个表示各种几何形状的结构体。它提供了创建圆形、正方形、三角形、线和多边形的方法,以及应用变换和设置属性(如纹理、颜色和z索引)的功能。

GTransform

GTransform是一个用于对形状应用变换的结构体。它支持平移、旋转和缩放操作,并且可以链接以应用多个变换。

颜色

Color结构体表示颜色,可以应用于各种形状。

示例:创建一个简单的应用程序

这是一个创建带有自定义形状的简单窗口的最小示例

  1. lib.rs

    #![feature(async_fn_in_trait)]
    
    use ellipsoid::prelude::*;
    use strum::{Display, EnumIter};
    
    struct MyApp {
        graphics: Graphics<MyTextures>,
        rotation: f32,
    }
    
    #[derive(Debug, Clone, Copy, EnumIter, Display, Default)]
    #[strum(serialize_all = "snake_case")]
    enum MyTextures {
        #[default]
        White,
    }
    
    impl Into<u32> for MyTextures {
        fn into(self) -> u32 {
            self as u32
        }
    }
    
    impl Textures for MyTextures {}
    
    impl App<MyTextures> for MyApp {
        async fn new(window: winit::window::Window) -> Self {
            let graphics = Graphics::<MyTextures>::new(window).await;
            MyApp {
                graphics,
                rotation: 0.,
            }
        }
    
        fn update(&mut self, dt: f32) {
            self.rotation += dt;
        }
    
        fn draw(&mut self) {
            let triangle = Shape::from_triangle()
                .set_color(Color::GREEN)
                .apply(GTransform::default().rotate(self.rotation));
            self.graphics.add_geometry(triangle.into());
        }
    
        fn input(&mut self, _event: &WindowEvent) -> bool {
            false
        }
    
        fn graphics_mut(&mut self) -> &mut Graphics<MyTextures> {
            &mut self.graphics
        }
    
        fn graphics(&self) -> &Graphics<MyTextures> {
            &self.graphics
        }
    }
    
    #[cfg_attr(target_arch = "wasm32", wasm_bindgen(start))]
    pub async fn start() {
        ellipsoid::run::<MyTextures, MyApp>().await;
    }
    
    
  2. main.rs

    use simple_app_readme::start;
    
    fn main() {
        async_std::task::block_on(start());
    }
    
  3. 将所选默认纹理添加到 assets/textures 目录(在项目根目录中创建),对我来说通常是白色像素有效

  4. 享受旋转的绿色三角形吧:简单应用程序截图

请参考提供的乒乓球游戏示例,以更全面地了解Ellipsoid的功能和特性。

许可证

本项目受MIT许可证的许可。

依赖项

约29-66MB
~1M SLoC