74 lines
1.8 KiB
Haxe
74 lines
1.8 KiB
Haxe
package ru.m.animate;
|
|
|
|
import flash.display.PixelSnapping;
|
|
import haxe.Timer;
|
|
import flash.display.Bitmap;
|
|
import flash.display.BitmapData;
|
|
|
|
|
|
class Animate extends Bitmap {
|
|
|
|
private static var timer:Timer;
|
|
private static var instances:Array<Animate> = [];
|
|
|
|
private static function init():Void {
|
|
if (timer == null) {
|
|
timer = new Timer(30);
|
|
timer.run = updateAll;
|
|
}
|
|
}
|
|
|
|
private static function updateAll():Void {
|
|
for (instance in instances) {
|
|
if (instance.playing) {
|
|
instance.update();
|
|
}
|
|
}
|
|
}
|
|
|
|
private static var a = new BitmapData(1, 1);
|
|
|
|
public var playing(default, set):Bool;
|
|
public var frames(default, set):Array<BitmapData>;
|
|
private var index:Int;
|
|
|
|
public function new(?frames:Array<BitmapData>) {
|
|
super(null, PixelSnapping.AUTO, true);
|
|
this.frames = frames == null ? [] : frames;
|
|
init();
|
|
instances.push(this);
|
|
}
|
|
|
|
public function set_frames(value:Array<BitmapData>):Array<BitmapData> {
|
|
if (value != null) {
|
|
frames = value;
|
|
bitmapData = frames[0];
|
|
index = 0;
|
|
}
|
|
return frames;
|
|
}
|
|
|
|
public function set_playing(value:Bool):Bool {
|
|
if (playing != value) {
|
|
playing = value;
|
|
}
|
|
return playing;
|
|
}
|
|
|
|
private function update():Void {
|
|
if (++index >= frames.length) {
|
|
index = 0;
|
|
}
|
|
var nextBitmapData = frames[index];
|
|
x -= (nextBitmapData.width - bitmapData.width) / 2;
|
|
y -= (nextBitmapData.height - bitmapData.height) / 2;
|
|
bitmapData = nextBitmapData;
|
|
}
|
|
|
|
public function dispose():Void {
|
|
if (instances.indexOf(this) > -1) {
|
|
instances.remove(this);
|
|
}
|
|
}
|
|
}
|