Crates.io | bevy_ss_anim |
lib.rs | bevy_ss_anim |
version | 0.2.2 |
source | src |
created_at | 2023-08-31 15:50:06.721075 |
updated_at | 2023-09-22 18:01:37.323975 |
description | Animated-Sprite From Sprite-Sheets Generated In Adobe Animate |
homepage | |
repository | https://github.com/lemz1/Bevy-Sprite-Sheet-Animation |
max_upload_size | |
id | 960170 |
size | 99,313 |
This Crate Currently Can Create An Animated Sprite From A Sprite Sheet Generated In Adobe Animate Using The Data Formats:
This Is In Early Development So Stuff Is Subject To Change
This Example Uses Sparrow, If Other Data Formats Are Supported You Can Of Course Also Use Them Similarly To This
// bevy version: 0.11.2
use bevy::prelude::*;
use bevy_ss_anim;
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.add_systems(Startup, setup)
.add_systems(Update, (jump, bevy_ss_anim::update_animations))
.run();
}
fn setup(
mut commands: Commands,
mut texture_atlases: ResMut<Assets<TextureAtlas>>,
asset_server: Res<AssetServer>,
) {
// spawn camera since nothing would get rendered without it
commands.spawn(Camera2dBundle::default());
// in assets/images/ you would have the player.png and player.xml files
// path to png and xml, texture atlases, asset server
let bundle = bevy_ss_anim::AnimatedSpriteBundle::from_sparrow("images/player", &mut texture_atlases, &asset_server);
if let Some(mut bundle) = bundle {
// animation name, animation prefix in xml, fps, looped, offset
bundle.animated_sprite.add_animation_by_prefix("idle", "Idle", 24, true, Vec2::default());
bundle.animated_sprite.add_animation_by_prefix("jump", "Jump", 24, false, Vec2::new(-5f32, 25f32));
bundle.sprite_sheet_bundle.transform.scale = Vec3::new(0.5, 0.5, 0.5);
// animation name, forced, texture atlas sprite, transform
bundle.animated_sprite.play_animation("idle", true, &mut bundle.sprite_sheet_bundle.sprite, &mut bundle.sprite_sheet_bundle.transform);
commands.spawn(bundle);
}
}
fn jump(
input: Res<Input<KeyCode>>,
mut query: Query<(&mut bevy_ss_anim::AnimatedSprite, &mut TextureAtlasSprite, &mut Transform)>,
) {
for (mut animated_sprite, mut sprite, mut transform) in query.iter_mut() {
if animated_sprite.animation_is_finished {
animated_sprite.play_animation("idle", true, &mut sprite, &mut transform);
}
if input.just_pressed(KeyCode::Space) && animated_sprite.current_animation().name != "jump" {
animated_sprite.play_animation("jump", true, &mut sprite, &mut transform);
}
}
}