• Runtimes
  • How to play multiple spine animations simultaneously in Android activity

I want to play spine animations through libgdx in Android, but the demos I found are all old versions, and they all play a spine animation in one activity. I need to master how to play multiple spine animations simultaneously in one activity.
I hope some friends can help me, thank you.

Related Discussions
...

To play multiple Spine animations simultaneously in an Android activity using libGDX, you can follow these steps:

  1. Set Up Your Project: Ensure you have libGDX and the Spine runtime integrated into your project. You can find the latest libGDX examples and setup instructions here.

  2. Load Skeletons and Animations: Load your Spine skeletons and animations using the SkeletonJson or SkeletonBinary classes. You can load multiple skeletons and manage them separately.

  3. Create Animation States: For each skeleton, create an AnimationState to manage the animations. You can queue animations on different tracks to play them simultaneously.

  4. Render the Skeletons: In your render loop, update and draw each skeleton.

Here is a basic example to illustrate these steps:

public class MyGdxGame extends ApplicationAdapter {
    private SpriteBatch batch;
    private SkeletonRenderer renderer;
    private Skeleton skeleton1, skeleton2;
    private AnimationState state1, state2;

    @Override
    public void create() {
        batch = new SpriteBatch();
        renderer = new SkeletonRenderer();

        // Load the first skeleton
        SkeletonJson json1 = new SkeletonJson(new AtlasAttachmentLoader(new TextureAtlas("skeleton1.atlas")));
        SkeletonData skeletonData1 = json1.readSkeletonData(Gdx.files.internal("skeleton1.json"));
        skeleton1 = new Skeleton(skeletonData1);
        AnimationStateData stateData1 = new AnimationStateData(skeletonData1);
        state1 = new AnimationState(stateData1);
        state1.setAnimation(0, "walk", true);

        // Load the second skeleton
        SkeletonJson json2 = new SkeletonJson(new AtlasAttachmentLoader(new TextureAtlas("skeleton2.atlas")));
        SkeletonData skeletonData2 = json2.readSkeletonData(Gdx.files.internal("skeleton2.json"));
        skeleton2 = new Skeleton(skeletonData2);
        AnimationStateData stateData2 = new AnimationStateData(skeletonData2);
        state2 = new AnimationState(stateData2);
        state2.setAnimation(0, "run", true);
    }

    @Override
    public void render() {
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

        float delta = Gdx.graphics.getDeltaTime();

        // Update and draw the first skeleton
        state1.update(delta);
        state1.apply(skeleton1);
        skeleton1.updateWorldTransform();
        batch.begin();
        renderer.draw(batch, skeleton1);
        batch.end();

        // Update and draw the second skeleton
        state2.update(delta);
        state2.apply(skeleton2);
        skeleton2.updateWorldTransform();
        batch.begin();
        renderer.draw(batch, skeleton2);
        batch.end();
    }

    @Override
    public void dispose() {
        batch.dispose();
    }
}

In this example:

  • Two skeletons (skeleton1 and skeleton2) are loaded and their animations are set.
  • The render method updates and draws both skeletons, allowing them to play simultaneously.

For more complex scenarios, such as mixing animations or handling user interactions, you can refer to the Spine Runtimes documentation and the AnimationState API.

    Spinebot Thank you for your reply. I will try following this method.