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.
How to play multiple spine animations simultaneously in Android activity
To play multiple Spine animations simultaneously in an Android activity using libGDX, you can follow these steps:
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.
Load Skeletons and Animations: Load your Spine skeletons and animations using the
SkeletonJson
orSkeletonBinary
classes. You can load multiple skeletons and manage them separately.Create Animation States: For each skeleton, create an
AnimationState
to manage the animations. You can queue animations on different tracks to play them simultaneously.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
andskeleton2
) 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.