• Editor
  • Starling - how to use the last version ?

Hi guys,

I just have downloaded the last AS3/Starling version and my code is now broken.

Here an example I used to write and does not work anymore :

var _cauldron:SkeletonAnimationSprite;

var json:SkeletonJson = new SkeletonJson(new StarlingAssetManagerAttachmentLoader(KilubuModel.instance.assetManager));
json.scale = KilubuModel.instance.scaleFactor;

var skeletonData:SkeletonData = json.readSkeletonData(KilubuModel.instance.assetManager.getObject("cauldron"));

//Need multiples animations played at the same time
var stateData:AnimationStateData = new AnimationStateData(skeletonData);
var fireStateData:AnimationStateData = new AnimationStateData(skeletonData);
var flueStateData:AnimationStateData = new AnimationStateData(skeletonData);

_cauldron = new SkeletonAnimationSprite(skeletonData);

_cauldron.setAnimationStateData(stateData);
_cauldron.addAnimationState(fireStateData);
_cauldron.addAnimationState(flueStateData);

_cauldron.skeleton.skinName = "cauldron_skin_02";

_cauldron.skeleton.setSlotsToSetupPose();

_cauldron.setAnimation("liquid_red_plouf",true);
_cauldron.setAnimation("fire_step_01",true,1);
_cauldron.setAnimation("flue",true,2);

How can I have my code works again ?

I have take a look at the new code - Now you have to use a SkeletonAnimation but you can't pass multiple AnimationStateData, only one. So you can't play 2 or 3 animations simultaneously.

Beside that, the code is not compatible with the last Starling version, for example in SleletonSprite, vertexData.setColorAndAlpha(0, rgb, a); function do not exist anymore, you have to call setColor and setAlpha.

I don't mind to review my code, but I was unable to find a clear change log and explanation about how to use the new version.

Than you.

Related Discussions
...

spine-starling uses the latest Starling, 1.4. If you don't see setColorAndAlpha then your Starling is out of date.

AnimationState now has multiple tracks. The first parameter to set/addAnimation is trackIndex. Use 0 for the first track, 1 for the second, etc. Animations for all tracks are applied each frame. It's similar to having multiple AnimationStates, but now just one does it all. There are also events on AnimationState now.

You're right, I should have at least done a blog post to tell about the new features. I may still do that, time permitting.

Thanks for the answer Nate,

I don't have understand what you said about the AnimationState. In order to have multiple animations on a same Skeleton I had to create multiple instance of AnimationStateData with the same SkeletonData as constructor parameter. I guess this is not the right way - could you tell me how to correctly proceed ?


var json:SkeletonJson = new SkeletonJson(new StarlingAssetManagerAttachmentLoader(KilubuModel.instance.assetManager));
			json.scale = KilubuModel.instance.scaleFactor;
			
		
var skeletonData:SkeletonData = json.readSkeletonData(KilubuModel.instance.assetManager.getObject("cauldron"));
			
//Create as many AnimationStateData as simultaneous animation needed			
var stateData:AnimationStateData = new AnimationStateData(skeletonData);
var fireStateData:AnimationStateData = new AnimationStateData(skeletonData);
var flueStateData:AnimationStateData = new AnimationStateData(skeletonData);
			
_cauldron = new SkeletonAnimation(skeletonData);


_cauldron.skeleton.skinName = "cauldron_skin_02";
			
_cauldron.skeleton.setSlotsToSetupPose();
			
//Launch simultaneous animations			_cauldron.state.setAnimation(0,stateData.skeletonData.findAnimation("liquid_red_plouf"),true);
_cauldron.state.setAnimation(1,fireStateData.skeletonData.findAnimation("fire_step_01"),true);
_cauldron.state.setAnimation(2,fireStateData.skeletonData.findAnimation("flue"),true);

Thank you

Try this:


var json:SkeletonJson = new SkeletonJson(new StarlingAssetManagerAttachmentLoader(KilubuModel.instance.assetManager));
			json.scale = KilubuModel.instance.scaleFactor;
			
var skeletonData:SkeletonData = json.readSkeletonData(KilubuModel.instance.assetManager.getObject("cauldron"));
			
// AnimationStateData is stateless and shared, only create one.
var stateData:AnimationStateData = new AnimationStateData(skeletonData);
// Define all the crossfading times.
stateData.setMixByName("run", "jump", 0.2);

_cauldron = new SkeletonAnimation(skeletonData, stateData); // pass stateData here

_cauldron.skeleton.skinName = "cauldron_skin_02";
_cauldron.skeleton.setSlotsToSetupPose();
			
//Launch simultaneous animations	
_cauldron.state.setAnimationByName(0, "liquid_red_plouf", true);
_cauldron.state.setAnimationByName(1, "fire_step_01", true);
_cauldron.state.setAnimationByName(2, "flue", true);