#wgpu #screen #modification #decals #pixel-engine #reproduction #old-pixel-game-engine

pixel_engine_backend

围绕 wgpu 的一层薄层,允许修改屏幕上显示的纹理

12 个版本 (7 个破坏性更改)

0.8.0 2022年12月29日
0.6.1 2022年12月2日
0.5.4 2022年11月27日
0.4.1 2021年12月21日
0.2.1 2020年7月26日

#775 in 图形API


2 个 crate 中使用 (通过 pixel_engine)

MIT 许可证

37KB
765

pixel_engine

用 Rust 重现 OneLoneCoder 编写的旧 pixelGameEngine。此 crate 被拆分为 3 个 crate

pixel_engine_backend

这提供了一个围绕 wgpu 的包装器。它处理贴图绘制和主屏幕

pixel_engine_draw

此 crate 提供处理绘制的 Traits。您只需实现一个 trait(SmartDrawing trait),其他 trait 都是 supertrait,因此您可以免费获得它们

pixel_engine

这是项目的核心,是主要库,旨在供用户使用。它提供 Engine 结构

如何使用

examples 文件夹中有大量示例。您只需运行 cargo run --bin=<NAME>,或访问 https://maix.me 以获取示例代码列表。

extern crate pixel_engine as px;
use px::traits::*;
fn main() {
    px::launch(async move { // the launch function is just a utility function to block on async, even on the web
        let game = px::EngineWrapper::new("Lines".to_owned(), (25, 25, 20));
        let mut start = (0, 0);
        let mut end = (5i32, 5i32);
        game.run(move |game: &mut engine::Engine| {
            // Drawing to the screen:
            game.clear([0, 0, 0].into());
            game.draw_line(
                start,
                end,
                [1.0, 1.0, 1.0].into(),
            );
            game.draw(start, [0, 255, 0].into());
            game.draw(end, [255, 0, 0].into());
            
            some_failible_function()?; // You can return errors, but it will crash the program and print the error message
            // Handling inputs
            game.get_key(px::inputs::Keycodes::Escape).any() {
                return Ok(false); // Returning Ok(false) is the only way to do a clean shutdown
            }
            Ok(true) // Continue to next frame
        });
    });
}

这是 line 示例的简化代码。有些示例实际上并不很有用(如 input.rs)。它们在这里是为了确保我不会破坏东西。

依赖关系

~10–23MB
~340K SLoC