#graphics #pixel #gamedev #simple #low-level

pixels-graphics-lib

围绕Pixels/Buffer Graphics的简单封装库

72个版本 (18个破坏性版本)

0.19.0 2024年4月17日
0.17.1 2024年3月30日
0.15.0 2023年12月27日
0.12.0 2023年8月17日
0.2.0 2021年12月31日

#429 in 游戏开发


用于 image-wrapper

自定义许可

235KB
6K SLoC

Crates.io Documentation

图形库

这是一个围绕 Pixels 设计的简单封装库,用于与 Buffer Graphics Lib 一起使用

用法

Cargo

在您的 Cargo.toml 文件中添加

pixels-graphics-lib = "0.19.0"
winit_input_helper = "0.16.0" #only needed if you're not using `run()`

代码

您可以使用 run_scenes 使用场景(需要默认功能 scenes

fn main() -> Result<()> {
    // Window prefs allow the size and position of the window to be saved and restored
    let window_prefs = WindowPreferences::new("com", "example", "app", 1)?;
    // Options contains scaling, UPS, etc
    let options = Options::default();
    // The switcher is how new scenes are created
    let switcher: SceneSwitcher<SceneResult, SceneName> =
        |style, scene_stack, new_scene| match new_scene {
            SceneName::Example => scene_stack.push(ExampleScene::new()),
        };
    let first_scene = ExampleScene::new();
    run_scenes(
        300,
        300,
        "Scenes Example",
        Some(window_prefs),
        switcher,
        first_scene,
        options,
        empty_pre_post()
    )?;
    Ok(())
}

// The scene name is the id used so the switcher knows which one to create
#[derive(Clone, Debug, PartialEq)]
enum SceneName {
    Example,
}

// After a scene is finished it can return values to it's parent using scene result
#[derive(Clone, Debug, PartialEq)]
enum SceneResult {}

struct ExampleScene {}

impl ExampleScene {
    pub fn new() -> Box<Self> {
        Box::new(Self {})
    }
}

impl Scene<SceneResult, SceneName> for ExampleScene {
    fn render(
        &mut self,
        graphics: &mut Graphics,
        mouse_xy: Coord,
        held_keys: &[KeyCode]) {
        todo!()
    }

    fn update(
        &mut self,
        timing: &Timing,
        mouse_xy: Coord,
        held_keys: &[KeyCode],
    ) -> SceneUpdateResult<SceneResult, SceneName> {
        todo!()
    }
}

或使用 run 进行更底层的操作

struct Example {}

fn main() -> Result<()> {
    let system = Box::new(Example {});
    run(240, 160, "Example", Box::new(system), Options::default())?;
    Ok(())
}

//Check `src/scenes.rs` for examples of implementing held keys, etc
impl System for Example {
    fn update(&mut self, timing: &Timing) {}
    fn render(&mut self, graphics: &mut Graphics) {}
}

功能

默认功能:window_prefssoundserdescenes

window_prefs

保存和恢复窗口位置和大小

要使用此功能,impl System 必须重写 System::window_prefs()

scenes

启用 Scenerun_scenes

包含 window_prefs

controller

  • 添加游戏手柄支持
  • 将游戏手柄状态添加到 Scene::updateScene::render

controller_xinput

与上述类似,但使用xinput,仅限Windows

sound

播放音乐或音效

serde

SerializeDeserialize 添加到大多数结构和枚举

images

加载和显示PNG、JPEG、BMP

file_dialogs

内置文件选择对话框,不建议使用,请使用 rfd

mint

启用 graphic-shapes/mint

项目

复古游戏

一些复古游戏

ICI图像编辑器

用于 IndexedImage、ICI文件的编辑器

USFX测试器

用于 USFX 的测试GUI

字体面板

用于创建 Buffer图形 字体的程序

依赖关系

~7–48MB
~744K SLoC