3个不稳定版本
0.1.0 | 2024年4月20日 |
---|---|
0.0.0-dev2 | 2024年4月15日 |
0.0.0-dev1 | 2024年3月5日 |
#887 in 算法
83KB
1.5K SLoC
这是一个通用网格实体库,旨在支持瓦片地图库或其他需要以网格方式访问实体的库。目标是尽可能保持API界面简单直观,并在可能的情况下避免延迟操作/状态,以便更直观地处理结构(例如:一个系统的更新应该被后续的系统看到,而不是在系统运行后的下一帧时看到。)。
特性
目前,bevy_tiles
支持以下功能
- 自动分块(包括访问分块实体)
- 自动创建地图
- 分层销毁分块和地图
- 支持N维地图
- 基于地图的查询
- 空间查询
- 批量操作以提高大量瓦片或分块的性能
即将推出的功能
- 自动处理分层删除。
- 根据分块和地图对瓦片进行内存排序(将来可能需要添加Bevy API功能)。
API
基本的API围绕以下内容展开:TileQuery
、TileCommands
和TileMapLabel
,如下所示。
struct GameLayer;
impl TileMapLabel for GameLayer {
const CHUNK_SIZE: usize = 16;
}
fn move_character(
keyboard_input: Res<Input<KeyCode>>,
mut commands: Commands,
character: TileQuery<GameLayer, TileCoord, With<Character>>,
walls: TileQuery<GameLayer, (), With<Block>>,
) {
let mut tile_commands = commands.tiles::<GameLayer, 2>();
let mut x = if keyboard_input.just_pressed(KeyCode::A) {
-1
} else {
0
};
x += if keyboard_input.just_pressed(KeyCode::D) {
1
} else {
0
};
let char_c = character.single();
let new_coord = [char_c[0] + x, char_c[1] + y];
if walls.get_at(new_coord).is_none() {
tile_commands.move_tile(*char_c, new_coord);
}
}
更多示例可以在示例文件夹中找到!
版本
Bevy版本 | bevy_tiles版本 |
---|---|
0.13 | 0.2 |
0.12 | 0.1 |
0.11 | 0.1-dev |
依赖项
~19–46MB
~728K SLoC