My class works if I load the image using a url but does not work if I pass in a MovieClip. Any idea why?
package {
import flash.events.*;
import flash.display.*;
import flash.geom.*;
import flash.net.URLLoader;
import flash.net.URLRequest;
public class CutTiles extends EventDispatcher {
private var imageLoader:Loader;
private var imageObj:MovieClip;
public var bitmapArray:Array;
public var progressPercentage:Number = 0;
public function CutTiles(imageObj:MovieClip, url:String = "") {
this.imageObj = imageObj;
if(imageObj == null)
{
if(url != "")
{
imageLoader = new Loader();
imageLoader.load(new URLRequest(url));
imageLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, imageLoading);
imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoaded);
}
else
{
throw new Error("Need at least 1 valid parameter");
}
}
else
{
imageLoaded();
}
}
private function imageLoaded(e:Event = null):void
{
if(imageObj == null)
{
imageObj = new MovieClip();
imageObj.addChild(imageLoader);
}
var mainImage:BitmapData = new BitmapData(imageObj.width,imageObj.height);
var tileX:Number = 36;
var tileY:Number = 36;
var tilesH:uint = Math.ceil(mainImage.width / tileX); // Number of Columns
var tilesV:uint = Math.ceil(mainImage.height / tileY);// Number of Rows
mainImage.draw(imageObj);
imageObj.x += 500;
bitmapArray = new Array();
for (var i:Number = 0; i < tilesH; i++)
{
bitmapArray* = new Array();
for (var n:Number = 0; n < tilesV; n++)
{
var tempData:BitmapData = new BitmapData(tileX,tileY);
var tempRect = new Rectangle((tileX * i),(tileY * n),tileX,tileY);
tempData.copyPixels(mainImage,tempRect,new Point(0,0));
bitmapArray*[n] = tempData;
}
}
if(imageLoader)
{
imageLoader.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS, imageLoading);
imageLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE, imageLoaded);
}
dispatchEvent(new Event("Finished"));
}
private function imageLoading(e:ProgressEvent):void
{
progressPercentage = Math.ceil((e.bytesLoaded / e.bytesTotal)*100);
trace(progressPercentage);
}
}
}
Here is where I create my object on the timeline for testing the class. myMC is a library movieclip and yes it is exported for actionscript.
var ct:CutTiles = new CutTiles(new myMC()); //this doesnt work
//var ct:CutTiles = new CutTiles(null, "myImage.jpg"); //this works
ct.addEventListener("Finished", loaded);
function loaded(e:Event):void
{
var bitmapArray:Array = ct.bitmapArray;
for (var j:uint =0; j < bitmapArray.length; j++)
{
for (var k:uint=0; k < bitmapArray[j].length; k++)
{
var bitmap:Bitmap=new Bitmap(bitmapArray[j][k]);
this.addChild(bitmap);
bitmap.x = (j+1)* bitmap.width;
bitmap.y = (k+1)* bitmap.height;
}
}
}