4 个版本
0.1.3 | 2022 年 12 月 31 日 |
---|---|
0.1.2 | 2022 年 12 月 31 日 |
0.1.1 | 2022 年 12 月 31 日 |
0.1.0 | 2022 年 12 月 31 日 |
1725 在 游戏开发
每月 41 次下载
在 open-oak-game-of-life 中使用
60KB
1.5K SLoC
open-oak
open-oak
是一个基于 OpenGL 的 2D 游戏引擎,使用 Rust 编写。它使用 glium 进行 OpenGL 绑定。此项目处于非常早期阶段。
功能
- 在屏幕上渲染纹理对象
- 处理窗口、鼠标和键盘事件
- 碰撞检测
示例
以下是一个简单的示例,它将一个纹理块渲染到屏幕上。
use glium::Surface;
use open_oak::events::handle_events;
use open_oak::init::{init, Game};
use open_oak::rectangle::Rectangle;
use open_oak::resource_manager::ResourceManager;
use open_oak::traits::{Renderable, Shaders, Texture};
use cgmath::Vector2;
struct Block {
rect: Rectangle,
}
impl Block {
fn new(position: Vector2<f32>, size: Vector2<f32>, color: imaopen_oak::Rgba<f32>) -> Block {
let rect = Rectangle::new(position, size, color);
Block { rect }
}
}
fn main() {
// init game and destructure
let game = init();
// destructure fields off Game
let Game {
display,
event_loop,
mut resource_manager,
..
} = game;
// define block
let mut block = Block::new(
Vector2::new(0.5, 0.5),
Vector2::new(0.3, 0.3),
imaopen_oak::Rgba::from([1.0, 0.0, 0.0, 1.0]),
);
// init rectangle
Rectangle::init(&mut resource_manager, &display);
// load block texture
let texture_name = String::from("block");
let texture = ResourceManager::load_texture(&display, "textures/block.png");
resource_manager.add_texture(&texture_name, texture);
// set block texture
block.rect.set_texture(texture_name.clone());
// game loop
event_loop.run(move |ev, _, control_flow| {
// handle events, keyboard input, etc.
handle_events(ev, control_flow);
let mut frame = display.draw();
frame.clear_color(0.2, 0.3, 0.3, 1.0);
// DRAW START
block.rect.draw(&mut frame, &resource_manager).unwrap();
frame.finish().unwrap();
// DRAW END
});
}
开发
我非常欢迎任何贡献!
要贡献,请派生存储库,然后编辑源代码。您可以在其中创建一个二进制包并放置一些示例代码,这样您就可以验证游戏引擎是否仍然正常工作,以及您的新功能/错误修复/ whatever 是否按预期工作。在您的二进制包的 Cargo.toml
中,您可以链接到您本地的 ge
版本
# --snip --
[dependencies]
`ge = { path = "/path/to/ge" }`
# --snip --
完成更改后,提交拉取请求!
待办事项
- 实现圆形和旋转矩形的碰撞检测
- 清理 trait 代码,可能删除
macros.rs
中的宏,因为它是一个代码恶臭,并用更少的 OOP-like 代码替换它
依赖关系
~20–35MB
~354K SLoC