Hi,
I’m using the script below to erase an image from the screen. On an iPad. On my computer it’s running fine. On the iPad it’s very slow. I was wondering if someone has suggestions on improving this script to make it run faster.
Thanks,
Joost
//
////////////////////////////////////////////////////
////////////////////////////////////////////////////
//
var lineSize:Number=200;
var doDraw:Boolean=false;
var resumeDrawing:Boolean=false;
var erasableBitmapData:BitmapData = new BitmapData(768, 1024, true, 0xFFFFFFFF);
var erasableBitmap:Bitmap = new Bitmap(erasableBitmapData);
erasableBitmap.cacheAsBitmap = true;
addChild(erasableBitmap);
maskee.cacheAsBitmap = true;
maskee.mask = erasableBitmap;
/*************************
ERASER
**************************/
var eraserClip:Sprite = new Sprite();
initEraser();
function initEraser():void {
eraserClip.graphics.lineStyle(lineSize,0xff0000);
eraserClip.graphics.moveTo(stage.mouseX,stage.mouseY);
}
//
var drawnBitmapData:BitmapData = new BitmapData(768, 1024, true, 0x00000000);
var drawnBitmap:Bitmap = new Bitmap(drawnBitmapData);
drawnBitmap.cacheAsBitmap = true;
//
var tempD:BitmapData = new BitmapData(drawnBitmapData.width,drawnBitmapData.height,true,0x0000CCFF);
var countDraw:int = 0;
var endDraw:int = 0;
//
var animationSpeed:int = 40; // 1000 is seconde
var timerVarken:Timer;
//
/*************************
MOUSE EVENTS
**************************/
timerVarken = new Timer(animationSpeed,0);
timerVarken.addEventListener(TimerEvent.TIMER, maskMove);
timerVarken.start();
maskee.addEventListener(MouseEvent.MOUSE_DOWN,startDrawing);
maskee.addEventListener(MouseEvent.MOUSE_UP,stopDrawing);
function startDrawing(e:MouseEvent):void {
eraserClip.graphics.moveTo(stage.mouseX,stage.mouseY);
doDraw=true;
}
function stopDrawing(e:MouseEvent):void {
doDraw=false;
resumeDrawing = false;
}
function maskOut(e:Event):void {
if (doDraw){
resumeDrawing = true;
}
}
function maskOver(e:MouseEvent):void {
if (resumeDrawing){
resumeDrawing = false;
eraserClip.graphics.moveTo(stage.mouseX,stage.mouseY);
}
}
function maskMove(e:TimerEvent):void {
//
if (doDraw && !resumeDrawing){
eraserClip.graphics.lineTo(stage.mouseX,stage.mouseY);
drawnBitmapData.fillRect(drawnBitmapData.rect, 0x00000000);
drawnBitmapData.draw(eraserClip , new Matrix(), null, BlendMode.NORMAL);
erasableBitmapData.fillRect(erasableBitmapData.rect, 0xFFFFFFFF);
erasableBitmapData.draw(drawnBitmap, new Matrix(), null, BlendMode.ERASE);
// -----------------------------
// ------------ ALI ------------
// -----------------------------
tempD.draw(eraserClip);
var totalImgRect:Rectangle = new Rectangle(0,0,drawnBitmapData.width,drawnBitmapData.height);
var bArr:ByteArray = tempD.getPixels(new Rectangle(0,0,eraserClip.width,eraserClip.height));
var totArr:ByteArray = drawnBitmapData.getPixels(totalImgRect);
var transRedPixels:uint = tempD.histogram()[0][0];
var v1:Vector.<uint> = drawnBitmapData.getVector(totalImgRect);
var perc:Number = 100 - ((100 * transRedPixels) / v1.length);
if (perc > 80) {
maskee.x = 768;
reset(null);
startDrawing(null);
tempD = new BitmapData(drawnBitmapData.width,drawnBitmapData.height,true,0x0000CCFF);
//MovieClip(root).removeChild(MovieClip(root).getChildByName("BMP"));
}
//
e.updateAfterEvent();
}
}
function reset(e:Event):void {
eraserClip.graphics.clear();
initEraser();
erasableBitmapData.fillRect(erasableBitmapData.rect, 0xFFFFFFFF);
}