10个版本 (6个破坏性版本)
0.7.0 | 2023年7月22日 |
---|---|
0.6.0 | 2023年4月12日 |
0.5.0 | 2022年11月14日 |
0.4.0 | 2022年9月21日 |
0.1.1 | 2021年11月26日 |
#1684 in 游戏开发
每月下载 49 次
在 3 个包中使用 (通过 bevy_tileset_core)
37KB
239 代码行
bevy_tile_atlas
用于有序瓦片集的TextureAtlas
构建器
目的
这个包是专门为与bevy_ecs_tilemap
(我强烈推荐用于Bevy的基于瓦片的游戏)一起使用而制作的,但可能也适用于更广泛的目的。
Bevy的标准的TextureAtlasBuilder
非常好,因为它试图尽可能智能和紧凑地打包纹理。然而,这意味着打包纹理的索引可能分布得很广。对于像bevy_ecs_tilemap
这样的包,当需要适当的顺序时,这可能会成为一个问题。
与bevy_ecs_tilemap
一起,这可能会更普遍地影响
- 瓦片动画(至少是通过递增索引循环通过一组瓦片的那些动画)
- 例如,
bevy_ecs_tilemap
中的GPUAnimated
- 例如,
- 瓦片索引(在这种情况下应该保持指定的顺序)
- 例如,第一个添加的纹理应该有索引
0
,依此类推
- 例如,第一个添加的纹理应该有索引
工作原理
这个包基本上是Bevy自己的TextureAtlasBuilder
的增强。然而,与将纹理放置在最佳位置不同,这个构建器按照插入顺序放置它们。当构建最终的TextureAtlas
时,这个顺序得到保持。
安装
将以下内容添加到您的[dependencies]
列表中的Cargo.toml
bevy_tile_atlas = "0.7.0"
用法
use bevy::prelude::*;
use bevy_tile_atlas::TileAtlasBuilder;
/// Creates a tile-based, ordered `TextureAtlas`
///
/// Assumes that the given handles are all loaded and in their desired order
fn build_tileset(handles: Vec<Handle<Image>>, textures: &mut Assets<Image>) -> TextureAtlas {
let mut builder = TileAtlasBuilder::default();
for handle in handles {
let texture = textures.get(&handle).unwrap();
builder.add_texture(handle, texture);
}
builder.finish(textures).unwrap()
}
注意:可以添加重复的纹理。这对于瓦片需要同时在多个索引处存在时很有帮助。
Bevy兼容性
bevy | bevy_tile_atlas |
---|---|
0.11 | 0.7.0 |
0.10 | 0.6.0 |
0.9 | 0.5.0 |
0.8 | 0.4.0 |
0.7 | 0.3.0 |
0.6 | 0.2.0 |
0.5 | 0.1.4 |
常见问题解答
如果这是为bevy_ecs_tilemap
制作的,为什么你没有提交PR?
我选择不对bevy_ecs_tilemap
开启Pull Request,因为它更像是一个针对特定用例的辅助工具,而不是一个必需的功能。它也可能在其他应用中独立存在。
为什么这局限于瓦片呢?
我没有强制实施瓦片限制,但我没有看到它在瓦片系统之外得到广泛使用。未来可能值得进一步通用化,特别是对于不同瓦片大小的瓦片集。然而,目前这是使它能够与bevy_ecs_tilemap
(它最初的用途)一起工作的最低要求。
整个纹理文件夹的顺序是否有保证?
如果您从整个文件夹中加载,插入顺序将取决于Bevy选择如何加载文件(我认为可能会有所不同,但我不是完全确定)。因此,建议手动将瓦片句柄放入一个Vec
或数组中,或者使用其他机制来自动排序它们(例如,一个配置文件)。
依赖项
~39–74MB
~1M SLoC