| Crates.io | bevy_spritefusion |
| lib.rs | bevy_spritefusion |
| version | 0.1.0 |
| created_at | 2025-12-23 16:05:46.390131+00 |
| updated_at | 2025-12-23 16:05:46.390131+00 |
| description | A Bevy plugin for loading Sprite Fusion tilemap exports |
| homepage | |
| repository | https://github.com/Hugo-Dz/bevy_spritefusion |
| max_upload_size | |
| id | 2001829 |
| size | 571,184 |
A Bevy plugin for loading and rendering Sprite Fusion maps.
Sprite Fusion is a free, web-based tilemap editor with a strong focus on simplicity.
Collider component on their tiles[dependencies]
bevy_spritefusion = "0.1"
Export your map from Sprite Fusion via the Bevy export button. You'll get:
map.json, The tilemap dataspritesheet.png, The generated tilesetPlace both files in your assets/ folder.
use bevy::prelude::*;
use bevy_spritefusion::prelude::*;
fn main() {
App::new()
.add_plugins(DefaultPlugins.set(ImagePlugin::default_nearest()))
.add_plugins(SpriteFusionPlugin)
.add_systems(Startup, spawn_map)
.run();
}
fn spawn_map(mut commands: Commands, asset_server: Res<AssetServer>) {
commands.spawn(Camera2d);
commands.spawn(SpriteFusionBundle {
map: SpriteFusionMapHandle(asset_server.load("map.json")),
tileset: SpriteFusionTilesetHandle(asset_server.load("spritesheet.png")),
..default()
});
}
use bevy::prelude::*;
use bevy_spritefusion::prelude::*;
fn find_colliders(query: Query<&TilePos, With<Collider>>) {
for pos in query.iter() {
println!("Collider at ({}, {})", pos.x, pos.y);
}
}
SpriteFusion allows you to attach custom attributes to tiles. These are preserved as TileAttributes components:
fn find_collectibles(query: Query<(&TilePos, &TileAttributes)>) {
for (pos, attrs) in query.iter() {
if attrs.get_bool("isCollectible").unwrap_or(false) {
let name = attrs.get_str("name").unwrap_or("unknown");
let value = attrs.get_i64("value").unwrap_or(0);
println!("{} at ({}, {}) worth {}", name, pos.x, pos.y, value);
}
}
}
fn find_layer(query: Query<(Entity, &SpriteFusionLayerMarker)>) {
for (entity, layer) in query.iter() {
println!("Layer '{}' (index: {}, collider: {})",
layer.name, layer.index, layer.collider);
}
}
The plugin expects the standard SpriteFusion JSON export format:
{
"tileSize": 16,
"mapWidth": 38,
"mapHeight": 14,
"layers": [
{
"name": "Ground",
"collider": true,
"tiles": [
{ "id": "0", "x": 5, "y": 11 },
{ "id": "1", "x": 6, "y": 11, "attributes": { "isSpawn": true } }
]
}
]
}
git clone https://github.com/Hugo-Dz/bevy_spritefusion.git
cd bevy_spritefusion
cargo run --example basic
Use arrow keys to move the camera.