Painting Flash CS3: real time erase tool
lunedì 11 febbraio, 2008Partendo dai codici forniti in Creare un'applicazione Paint in Flash CS3, ed eseguendo piccole modifiche, si può migliorare notevolmente lo strumento di "erase". Aggiungendo una Shape non visibile, è possibile usarla come "piano" per eseguire il draw() in modalità di fusione "erase". Come mostrato nell'esempio qui sotto, dopo aver disegnato qualcosa, tenete premuto il tasto Ctrl e l'effetto di "cancellazione" appare ora in tempo reale.
Il codice è il seguente - sorgente:
-
//
-
//
-
//
-
addChild (event_spr);
-
//
-
//
-
matrix.createGradientBox (area_width, area_height, 1, 0, 0);
-
//
-
with (event_spr.graphics) {
-
beginGradientFill (fillType,colors,alphas,ratios,matrix,spreadMethod);
-
drawRect (0,0,area_width, area_height);
-
endFill ();
-
}
-
// paint event
-
//
-
addChild (bmp);
-
//
-
// shape temporanea
-
addChild (draw_shape);
-
//
-
// shape, non visibile, usata per la "cancellazione"
-
-
//
-
debug ("_onMouseDown");
-
draw_shape.graphics.lineStyle (10, 0xffffff, 1);
-
erase_shape.graphics.lineStyle (20, 0xffffff, 1);
-
draw_shape.graphics.moveTo (e.localX,e.localY);
-
erase_shape.graphics.moveTo (e.localX,e.localY);
-
md = true;
-
}
-
//
-
md = false;
-
bmp.bitmapData.draw (draw_shape);
-
draw_shape.graphics.clear ();
-
erase_shape.graphics.clear ();
-
}
-
//
-
debug ("_onMouseMove");
-
if (md && !e.ctrlKey) {
-
draw_shape.graphics.lineTo (e.localX,e.localY);
-
} else if (md && e.ctrlKey) {
-
erase_shape.graphics.lineTo (e.localX,e.localY);
-
bmp.bitmapData.draw (erase_shape,null,null,"erase");
-
}
-
}
-
//
-
trace (d.getMinutes()+":"+d.getSeconds()+":"+d.getMilliseconds()+": "+v);
-
}
È stata aggiunta una nuova Shape, erase_shape, non visibile (non è stato effettuato nessun addChild()):
Nella parte di codice che si preoccupa di disegnare è stato introdotto il controllo per il tasto Ctrl e, se premuto, viene interessata proprio la Shape erase_shape e copiata sulla Bitmap:
-
....
-
erase_shape.graphics.lineTo (e.localX,e.localY);
-
bmp.bitmapData.draw (erase_shape,null,null,"erase");



















Lascia un commento