I wrote a class for starling to play animations

I wrote a class for starling to play animations

package;

import starling.textures.Texture;
import openfl.Vector;
import starling.core.Starling;
import openfl.utils.Dictionary;
import starling.display.MovieClip;
import starling.display.Sprite;

class Anim extends Sprite {
	private var animations:Dictionary<String, MovieClip> = new Dictionary();
	private var currentAnimation:MovieClip;

	public var currentLabel:String;

	public function new() {
		super();
	}

	public function addAnimation(name:String, textures:Vector<Texture>, fps:Number = 12):Void {
		final mc:MovieClip = new MovieClip(textures, fps);
		animations[name] = mc;
	}

	public function gotoAndPlay(name:String, frame:Int = 0):Void {
		if (currentLabel == name) {
			return;
		}
		if (currentAnimation != null) {
			currentAnimation.stop();
			this.removeChild(currentAnimation);
			Starling.current.juggler.remove(currentAnimation);
		}

		final newAnim:MovieClip = animations[name];

		if (newAnim != null) {
			currentAnimation = newAnim;
			currentAnimation.currentFrame = frame;
			currentAnimation.play();
			currentLabel = name;
			this.addChild(currentAnimation);
			Starling.current.juggler.add(currentAnimation);
		}
	}
}

1 Like
 public var mc:Anim;
mc = new Anim();
            mc.addAnimation("wait", Load.getInstance().ass.getTextures("wait_"), 7);
            mc.addAnimation("move", Load.getInstance().ass.getTextures("move_"), 7);
            this.addChild(mc);

            mc.gotoAndPlay("wait", 0);

@Bink

How did you like it?

If you find any problems, please feel free to let me know

Oh I see, so it behaves something like frame labels would have in an Adobe Flash/Animate timeline, but done so in Starling’s optimised way.

This looks quite efficient @785597448 :smiling_face_with_sunglasses::+1: