Skip to content

Instantly share code, notes, and snippets.

@timdp
Created January 14, 2015 14:05
Show Gist options
  • Save timdp/4ae6e2757112169de255 to your computer and use it in GitHub Desktop.
Save timdp/4ae6e2757112169de255 to your computer and use it in GitHub Desktop.
Animated path as mask for an image
package {
import flash.display.Bitmap;
import flash.display.Sprite;
import flash.events.Event;
import flash.geom.Point;
public class Main extends Sprite {
public const POINTS:uint = 15;
public const OUTER_SCALE:Number = 0.9;
public const INNER_SCALE:Number = 0.7;
public const ROTATION_DURATION:Number = 10000;
[Embed(source="img.jpg")]
public static var Img:Class;
public function Main():void {
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void {
removeEventListener(Event.ADDED_TO_STAGE, init);
var img:Bitmap = new Img() as Bitmap;
var mask:Sprite = new Sprite();
var x:Number = img.width / 2;
var y:Number = img.height / 2;
var radius:Number = Math.min(x, y);
var outerRadius:Number = radius * OUTER_SCALE;
var innerRadius:Number = radius * INNER_SCALE;
var i:uint;
var angleDelta:Number = 2 * Math.PI / POINTS;
var commands:Vector.<int> = new Vector.<int>(POINTS * 2, true);
commands[0] = 1;
for (i = 1; i < commands.length; ++i) {
commands[i] = 2;
}
addChild(mask);
addChild(img);
img.mask = mask;
var data:Vector.<Number> = new Vector.<Number>(POINTS * 4, true);
var startTime:Number = new Date().getTime();
this.addEventListener(Event.ENTER_FRAME, function():void {
var currentTime:Number = new Date().getTime();
var angle:Number = (currentTime - startTime) / ROTATION_DURATION * 2 * Math.PI;
for (i = 0; i < POINTS; ++i) {
data[i * 4] = x + Math.cos(angle) * outerRadius;
data[i * 4 + 1] = y + Math.sin(angle) * outerRadius;
data[i * 4 + 2] = x + Math.cos(angle + angleDelta / 2) * innerRadius;
data[i * 4 + 3] = y + Math.sin(angle + angleDelta / 2) * innerRadius;
angle += angleDelta;
}
mask.graphics.clear();
mask.graphics.beginFill(0x0);
mask.graphics.drawPath(commands, data);
mask.graphics.endFill();
});
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment