• Runtimes
  • Spine Web Player

  • Düzenlendi
Related Discussions
...

Hi, I am using the spine web player with vuejs, currently the my animation will keep auto looping, is there any function i can use to make it only run once?

var spinplayer = new spine.SpinePlayer(vm.$refs["animation-ball-holder"], {
jsonUrl: "img/dd12/dd12machine.json",
atlasUrl: "img/dd12/dd12machine.atlas.txt",
showControls: false ,
backgroundColor: "#00000000",
animation: "Red",
alpha: true,


    });

There's currently no way to have an animation not loop. Can you describe your use case a little? It seems that the player may be a bit of overkill for your use case. Maybe we should consider a simpler widget/view if your use case turns out to be more common.

Mario yazdı

There's currently no way to have an animation not loop. Can you describe your use case a little? It seems that the player may be a bit of overkill for your use case. Maybe we should consider a simpler widget/view if your use case turns out to be more common.

I want to display an animation when certain condition occur, then stop it when the animation end. What do you mean by simpler widget/view?

The Spine web player is meant as a UI element similar to say a YouTube embed, with controls similar to a video player to scrub timelines, pause/resume, etc. As such, it may not be the best fit for your use case which appears to be playing animations based on events generated by your site.

While it is possible to hack the Spine web player to better fit your use case, it is likely easier and more in line with your needs to use pixi-spine for your use case. https://github.com/pixijs/spine

You can access the AnimationState (and Skeleton, eg to set attachments, skins, move bones, etc) by using the success callback. For example, here is how you'd play an animation without looping:

var spinplayer = new spine.SpinePlayer(vm.$refs["animation-ball-holder"], {
   jsonUrl: "img/dd12/dd12machine.json",
   atlasUrl: "img/dd12/dd12machine.atlas.txt",
   showControls: false ,
   backgroundColor: "#00000000",
   animation: "Red",
   alpha: true,
   // Added:
   success: function (player) {
      player.animationState.setAnimation(0, "Red", false); // false means don't loop
   }
});

When messing with the AnimationState directly like this, we recommend using showControls: false so the player controls don't interfere.

See here for AnimationState documentation:
Applying Animations - Spine Runtimes Guide: AnimationState API

Here is how you can play two animations (jump then walk looping):

success: function (player) {
   player.animationState.setAnimation(0, "jump", false);
   player.animationState.addAnimation(0, "walk", true, 0);
}

Note that the viewport (the size and position the skeleton appears) by default is based on the skeleton bounds in the animation you specify for the player, animation: "Red" above. If you change the animation, the player will still use the same viewport.

We've added this to the docs:
Spine Web Player: Advanced playback