Tag: Actionscript 3.0
Usiamo il Threshold
by admin on Jun.14, 2009, under Actionscript 3.0
Il supporto del Threshold è stato introdotto con la versione 8 del Flash Player.
Il metodo threshold( ) è uno dei metodi più complessi nel panorama delle BitmapData API, ma abbastanza potente una volta che abbiamo capito come lavora. Il metodo usa due BitmapData:
- destBitmap, che rappresenta la bitmap che sarà alterata.
- sourceBitmap , che è l’altra bitmap che riceve dei parametri che sono gli sono stati passati. Questo metodo usa i pixel di questa bitmap per fare i suoi calcoli.
Il metodo confronta ogni pixel nel sourceBitmap contro un valore specificato, usando uno dei sei operatori confrontati. Per ulteriori approfondimenti si può consultare il LiveDocs di Adobe.
Ecco in breve la sintassi del metodo:
destBitmap.threshold(sourceBitmap,
sourceRect,
destPoint,
operation,
threshold,
color,
mask,
copySource)
Il parametro, sourceRect , è u’istanza della classe flash.geom.Rectangle. Esso definisce quale porzione del sourceBitmap vogliamo usare per il confronto. Se vogliamo usare l’intera, possiamo passare in sourceBitmap.rect come un valore di questo parametro.
Il parametro destPoint specifica il punto nel destBitmap nel quale i pixels iniziano ad essere affetti dall’alterazione, l’immagine sourceBitmap e sovrappoosta sulla destBitmap. Se vogliamo usare come punto di destinazione 0, 0 basta passarli come parametri al new Point( ) es.: (new Point(0, 0 )).
Il parametro operation è una delle sei stringhe che rappresentano gli operatori di confronto in Actionscript, esse sono: < , <= , > , >= , == , e !=
Il parametro successivo è threshold, ogni pixel viene confrontato con questo valore.
Il parametro mask serve per isolare un particolare canale di colore.
Adesso facciamo un esempio pratico sull’uso del threshold:
import caurina.transitions.*; var url:String = "images/foto7_b.jpg"; var image1:Bitmap; var destimage2:Bitmap; var perc:Number; var loader:Loader; var image:Bitmap; var holder:MovieClip; holder = new MovieClip(); addChild(holder); configureAssets(); function configureAssets():void { loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler); loader.contentLoaderInfo.addEventListener(Event.INIT, initHandler); loader.contentLoaderInfo.addEventListener(Event.OPEN, openHandler); loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progressHandler); var request:URLRequest = new URLRequest(url); loader.load(request); holder.addChild(loader); } function completeHandler(e:Event):void { //trace("Caricamento Completato"); tf.text = "Caricamento Completato"; } function initHandler(e:Event):void { var loaderHgt = e.currentTarget.height; var loaderWdt = e.currentTarget.width; var src_bmpd1:BitmapData = new BitmapData(loaderWdt, loaderHgt); src_bmpd1.draw(this); var dest_bmpd2:BitmapData = new BitmapData(loaderWdt, loaderHgt, false); destimage2 = new Bitmap(dest_bmpd2); holder.addChild(destimage2); var j:Number = 0; function onTransitions():void { j++; //trace(j) dest_bmpd2.threshold(src_bmpd1, new Rectangle(0, 0, src_bmpd1.width, src_bmpd1.height), new Point(0, 0), ">=", (j/55) * 0xFFFFFF, 0xFFFFFFFF, 0xFFFFFF, true); } Tweener.addCaller(this, {onUpdate:onTransitions, time:1, count:55, transition:"linear"}); function onRepeatEffect():void { Tweener.addCaller(this, {onUpdate:onTransitions, time:1, count:55, transition:"linear"}); } repeat_btn.addEventListener(MouseEvent.CLICK, onRepeatEffect); } function openHandler(e:Event):void { //trace("Caricamento inizializzato, attendere il completamento!"); } var tf:TextField = new TextField(); tf.autoSize = TextFieldAutoSize.LEFT; tf.textColor = 0xFF0000; tf.x = 30; tf.y = 366; addChild(tf); function progressHandler(e:ProgressEvent) { perc = Math.round((e.bytesLoaded/e.bytesTotal)*100); //trace("Caricamento in corso: "+perc+"%"); tf.text = String("Loading: " + perc + "%"); } function ioErrorHandler(e:IOErrorEvent):void { trace("Impossibile caricare l'immagine: " + url); } ///////////////////////// repeat_btn.label = "Repeat"; |
Embed Fonts in ActionScript 3.0
by admin on Mar.02, 2009, under Actionscript 3.0
In questo esempio vedremo come fare l’embed del font in Flash. Creiamo un file embedfont.fla e lo salviamo. Adesso facciamo l’embed del font, c’è da dire che qualora si vogliono utilizzare ad esempio tre versioni diverse dello stesso font (ovvero normale, bold e corsivo) bisogna embeddare il font tre volte con tre nomi diversi, adesso vediamo la procedura per embeddare un font in Flash.
1) Selezioniamo Window > Library (Finestra > Libreria)se la libreira di flash non è aperta,
2) Dal menu pop-up Options (Opzioni) selezioniamo New Font (Nuovo Font), quindi apparirà la finestra di dialogo del simbolo,
3) Sotto Font, selezioniamo Adobe Caslon Pro,
4) Quindi digitiamo sopra il nome che desideriamo attribuire al nostro font di libreria, nella fattispecie assegniamo AdobeCaslon, quiindi clicchiamo su OK. A questo punto nella Libreria (Library) dovrebbe apparire un font con il nome AdobeCaslon.
5) Selezioniamo nella Libreria (Library) AdobeCaslon e su di esso facciamo click di destro, apparirà il menu pop-up di scelta qui selezioniamo l’opzione Linkage (Concatenamento). Nella finestra di dialogo Linkage (Concatenamento) selezioniamo Export For ActionScript. A questo punto apparirà una finestra dove dirà che la classe è stata creata quindi facciamo click su OK.
Adesso operiamo col codice, creiamoci una Classe FontEmbed, quindi in Flash facciamo File > New(Nuovo) e selezioniamo dalla finestra di dialogo ActionScript File. Fatto questo salviamo il file nella stessa directory dove risiede il file FLA, lo salviamo assegnando il nome FontEmbed.
N.B. nella Library (Libreria) creiamo altri due simboli del font Adobe Caslon Pro uno con Bold e l’altro con Italic, in questo esempio abbiamo assegnato i seguenti nomi AdobeCaslon per la versione normale del font, AdobeCaslonBold per quella Bold e AdobeCaslonItalic per quella Italic.
Adesso siamo pronti per scrivere il codice:
package { import flash.display.*; import flash.text.*; public class FontEmbed extends Sprite { private var msg:String = "Lorem ipsum dolor sit amet"; // private var fmt:TextFormat; private var tf:TextField; private var adobecaslon:AdobeCaslon = new AdobeCaslon(); private var format:TextFormat; private var tf_bold:TextField; private var adobecaslon_bold:AdobeCaslonBold = new AdobeCaslonBold(); private var text_fmt:TextFormat; private var tf_italic:TextField; private var adobecaslon_italic:AdobeCaslonItalic = new AdobeCaslonItalic(); public function FontEmbed() { fmt = new TextFormat(); fmt.font = adobecaslon.fontName; fmt.color = 0x333333; fmt.size = 20; tf = new TextField(); tf.embedFonts = true; tf.defaultTextFormat = fmt; tf.text = msg; tf.autoSize = TextFieldAutoSize.LEFT; tf.x = 10; tf.y = 10; addChild(tf); //Adobe Caslon Bold format = new TextFormat(); format.font = adobecaslon_bold.fontName; format.color = 0x333333; format.size = 20; tf_bold = new TextField(); tf_bold.embedFonts = true; tf_bold.defaultTextFormat = format; tf_bold.text = msg; tf_bold.autoSize = TextFieldAutoSize.LEFT; tf_bold.x = 10; tf_bold.y = 45; addChild(tf_bold); //Adobe Caslon Italic text_fmt = new TextFormat(); text_fmt.font = adobecaslon_italic.fontName; text_fmt.color = 0x333333; text_fmt.size = 20; tf_italic = new TextField(); tf_italic.embedFonts = true; tf_italic.defaultTextFormat = text_fmt; tf_italic.text = msg; tf_italic.autoSize = TextFieldAutoSize.LEFT; tf_italic.x = 10; tf_italic.y = 80; addChild(tf_italic); } // } } |
A questo punto andiamo sul FLA embedfont e nella Document Class facciamo l’import della nostra Classe FontEmbed.
Gallery XML con scrolling verticale
by admin on Sep.26, 2008, under Actionscript 3.0
Tool: Flash CS 3
Actionscript 3.0
Una gallery XML semplicissima in Actionscript 3.0, la gallery è corredata di uno scrolling verticale e di una Classe per il preload delle immagini. La classe è riutilizzabile anche per altri progetti in AS 3.0. Le transizioni sulle immagini sono effettuate con l’uso delle caurina.transitions.Tweener, una classe usata per la creazione di tweenings e altre transitions attraverso codice actionscript.
Passiamo al codice:
/* Eseguiamo l'import delle Caurina transition e della Classe CustomLoader*/ import caurina.transitions.*; import net.iwc.CustomLoader; // Dichiariamo alcune variabili var xmlFile:String = "gallery.xml"; var pathImage:String = "images/"; var yPos:int; var nodeCount:int; var counter:int = 0; var xml:XML; var intervalDuration:int = 1000; var intervalID:int; var descrArr:Array = new Array; var lgImageArr:Array = new Array; var listNode:XML; var preloadPoint:Point = new Point(10, 10); var loader_ldr:CustomLoader //Creiamo in runtime il box che conterrà le clip immagine var contentBox:MovieClip = new MovieClip(); contentBox.x = 0; contentBox.y = 0; addChild(contentBox); //Creiamo in runtime una mask che poi applicheremo al contentBox var masker:MovieClip = new MovieClip(); masker.graphics.beginFill(0x333333,1); masker.graphics.drawRect(0, 5, 100, 380); masker.graphics.endFill(); addChild(masker); //Creiamo in runtime un contenitore dove caricheremo l'immagine di dettaglio var container_mc:MovieClip = new MovieClip(); container_mc.x = 150; container_mc.y = 10; addChild(container_mc); //Aggiungiamo una funzione per il caricamento dell'xml function callXML():void { var urlRequest:URLRequest = new URLRequest(xmlFile); var loader:URLLoader = new URLLoader(); loader.addEventListener(Event.COMPLETE, xmlLoaded); loader.load(urlRequest); } callXML(); //Aggiungiamo una funzione per leggere il contenuto dei nodi xml function xmlLoaded(e:Event):void { var loader:URLLoader = URLLoader(e.target); xml = new XML(loader.data); nodeCount = xml..images.smImage.length(); //trace(nodeCount) for each (listNode in xml..images) { var descr:String = listNode.descr; var lgImage:String = listNode.lgImage; descrArr.push(descr); lgImageArr.push(lgImage); } /*trace(lgImageArr); trace(descrArr);*/ } intervalID = setInterval(createList, intervalDuration, descrArr, lgImageArr); function createList(txt:Array, img:Array):void { var itemClip:MovieClip = new MovieClip(); itemClip.buttonMode = true; itemClip.idCur = img[counter]; //creiamo una variabile dinamica idCur itemClip.curText = txt[counter]; //creiamo una variabile dinamica curText itemClip.x = 10; itemClip.y = 10; itemClip.y = yPos; yPos += 90; contentBox.addChild(itemClip); //trace(yPos) loader_ldr = new CustomLoader(pathImage + xml..images.smImage[counter], preloadPoint); loader_ldr.x = 0; loader_ldr.y = 0; //loader_ldr.load(new URLRequest(pathImage + xml..product.smImage[counter])); itemClip.addChild(loader_ldr); counter++; //trace(counter); if (counter == nodeCount) { //trace("Clearing Interval"); clearInterval(intervalID); } itemClip.alpha = 0; Tweener.addTween(itemClip, {alpha:1, time:.7, transition:"linear"}); itemClip.addEventListener(MouseEvent.CLICK, loadContent); function loadContent(e:MouseEvent) { //trace(e.currentTarget.idCur) contentLoaded(e.currentTarget.curText, e.currentTarget.idCur); } } function contentLoaded(text_str:String, pathImg:String) { var ldr:CustomLoader = new CustomLoader(pathImage + pathImg, preloadPoint); container_mc.addChild(ldr); container_mc.alpha = 0; Tweener.addTween(container_mc, {alpha:1, time:.7, transition:"linear"}); //ldr.load(new URLRequest(pathImage + pathImg)); text_txt.text = text_str; } |
da questo codice ho omesso la parte riguardante il codice sulla scrollbar che trovate all’interno del fla
Download del file