Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package ca.esdot.lib.display
- {
- import avmplus.getQualifiedClassName;
- import flash.display.Bitmap;
- import flash.display.BitmapData;
- import flash.display.Sprite;
- import flash.geom.Point;
- import flash.geom.Rectangle;
- import flash.utils.Dictionary;
- public class BlitClip extends Bitmap
- {
- protected static var frameCacheByAsset:Object = {};
- protected var _currentStartFrame:int = 1;
- protected var _currentEndFrame:int = 20;
- protected var _currentFrame:int = 1;
- protected var frameCache:Object;
- public function BlitClip(bitmapAsset:Class, jsonAsset:Class){
- //Check cache, if we have a cache us it.
- if(frameCacheByAsset[getQualifiedClassName(bitmapAsset)])
- {
- frameCache = frameCacheByAsset[getQualifiedClassName(bitmapAsset)];
- }
- //If not cached, rip frames from bitmapData and grab json
- else {
- var data:Object = JSON.parse(new jsonAsset().toString());
- var bitmap:Bitmap = new bitmapAsset();
- var spriteSheet:BitmapData = bitmap.bitmapData;
- //todo: use JSON
- var frameWidth:int = 186;
- var frameHeight:int = 176;
- var cols:int = spriteSheet.width/frameWidth|0;
- var rows:int = spriteSheet.height/frameHeight|0;
- frameCache = [];
- for(var i:int = 0; i < 20; i++){
- var col:int = i%cols;
- var row:int = i/cols|0;
- var bmpData:BitmapData = new BitmapData(frameWidth, frameHeight, true, 0x0);
- bmpData.copyPixels(spriteSheet, new Rectangle(frameWidth*col, frameHeight*row, frameWidth, frameHeight), new Point());
- frameCache[i] = bmpData;
- }
- //add data to static cache
- frameCacheByAsset[getQualifiedClassName(bitmapAsset)] = frameCache;
- }
- //Show frame 1
- this.bitmapData = frameCache[_currentStartFrame-1];
- }
- override public function set bitmapData(value:BitmapData):void {
- super.bitmapData = value;
- smoothing = true;
- }
- public function tick():void {
- if(_currentFrame > _currentEndFrame){
- _currentFrame = _currentStartFrame;
- }
- currentFrame = _currentFrame;
- _currentFrame++;
- }
- public function set currentFrame(value:int):void {
- _currentFrame = Math.max(0, Math.min(frameCache.length, value));
- this.bitmapData = frameCache[_currentFrame-1];
- }
- }
- }
Add Comment
Please, Sign In to add comment