#sprite-sheet #animation #bevy #2d #assets #json-array

bevy_ss_anim

Animated-Sprite From Sprite-Sheets Generated In Adobe Animate

11 releases

0.2.2 Sep 22, 2023
0.2.1 Sep 1, 2023
0.1.2 Sep 1, 2023
0.1.1 Aug 31, 2023
0.0.5 Aug 31, 2023

#1725 in Game dev

Download history 30/week @ 2024-07-29

67 downloads per month

Custom license

33KB
497 lines

Bevy tracking crates.io docs.rs

Bevy Sprite Sheet Animation

This Crate Currently Can Create An Animated Sprite From A Sprite Sheet Generated In Adobe Animate Using The Data Formats:

  • Sparrow V1
  • Sparrow V2
  • Starling
  • Json
  • Json Array
  • Edge Animate

Disclaimer!

This Is In Early Development So Stuff Is Subject To Change

How To Use This Crate

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);
        }
    }
}

Dependencies

~31–46MB
~775K SLoC