Search code examples
flashanimationstructurehaxekeyframe

Haxe: Keyframe animation without frames


I would like to do simple (looping) animation (moving, changing alpha etc) in Haxe (flash9). I don't have anything that resembles frames in my library, just single frame assets.

Since I am a beginner. I am not necessarily looking for a sophisticated framework. I would be happy with something quick & dirty. Maybe ifs checking the frame (class variable) and linearly interpolating the values.

class MyClass extends Sprite {
    static var frame:Int = 0;
    static inline var framerate:Int = 25;

    static function main() {
        var app:MyClass = new MyClass();
        flash.Lib.current.addChild(app);
    }

    private function new() {
        super();

        // init assets here

        var myTimer:Timer = new Timer(1000/framerate);
        myTimer.addEventListener(TimerEvent.TIMER, animate);
        myTimer.start();
    }

    function animateForeground(event:TimerEvent) {
        frame = (frame + 1) % 1000;

        // set new values depending on frame
    }

}

I know the basic idea of keyframe animation. What I am looking for is more about how to structure this part of the program.

Can you please give me some pointers on how should I proceed?


Solution

  • If you want to do animations I would very much recommend using a tweening library, although I understand that you might want to learn the basics before "cheating" past them.

    I would recommend hooking up your animations to the ENTER_FRAME event instead of a timer running at the same speed as your framerate. There's really no need to decouple these two, since the timer isn't any more reliable than the ENTER_FRAME event, and there's no need in moving stuff around if it can't be seen anyway.

    Also, I don't think you should focus that much on "keyframe" animation. That is a useful concept when you have keyframes, if you don't it's way more practical just to do what feels like the best way to implement this.

    I would put some code in here, but I'm having a little bit of a hard time coming up with any since I'm not really sure what you're trying to achieve here.