Categoria ‘Flash’
SWFObject è uno script Javascript utilizzato per inserire contenuti Flash all’interno delle pagine Web. La sua principale funzione è quella di eliminare la richiesta di attivazione del controllo da parte di Microsoft Internet Explorer (che, comunque sia, è in fase di dismissione – vedi qui) e, più interessante, la capacità di verificare ed installare automaticamente il Flash Player ove richiesto. SWFObject può considerarsi un’ottima alternativa al kit di install/detect fornito dalla stessa Adobe e generabile all’interno dell’IDE Flash (in tutte le sue versioni). Con la versione 2.0, SWFObject migliora le sue performance e il suo utilizzo. Come indicato sulla documentazione ufficiale, spostata su Google Code, le novità di questa release sono talmente tante da renderlo NON compatibile con le precedenti versioni. Questo si traduce di fatto in una revisione completa del codice per chi decidesse di aggiornare una precedente versione SWFObject alla 2.0.
Lo script è ora allineato agli ultimi standard, sia dal punto di vista sintattico che da quello “non intrusivo”. Supporta tutte le precedenti features, come l’installazione rapida del Flash Player, con un codice più chiaro e facile da usare. Il passaggio dei parametri, ad esempio, da Javascript al Player Flash (e quindi al nostro filmato) è ora assai più chiaro e versatile. Inoltre sono stati introdotti due principali modi di funzionamento: statico e dinamico, in base al tipo di pagina e processo di design che stiamo effettuando.
Utile e davvero bon fatto è il tool online che genera il codice SWFObject per noi.
LINK:
Continua...
Girando su vari Blog (thanks Frank) e grazie alle discussioni con Julius, mi sono accorto che, oltre all’estremo interesse per Adobe AIR, esiste anche molta confusione, e non a torto. Sia gli sviluppatori che gli utilizzatori continuano ad non avere ben chiaro cosa sia, a che cosa serva e come si sviluppi in Adobe AIR. Ho deciso, quindi, di raccogliere le varie discussioni in questa sorta di FAQ per cercare di chiare un po’ quello che si nasconde effettivamente dietro ad Adobe AIR.
Continua...
Una fantastica innovazione introdotta con Actionscript 3.0 è quella di poter enumerare tutti gli oggetti (anche shape disegnate al momento) presenti in un contenitore (DisplayObjectContainer). In effetti era ora che Adobe introducesse questa feature. Mi ero sempre lamentato di questa mancanza, soprattutto perchè andando in debug l’ambiente Flash era in grado di svolgerla tranquillamente ma rimaneva completamente inaccessibile da codice!
Continua...
Chissà perchè immagino Adobe con una lista di bugs in continuo aumento!?. Il baco che ho trovato, nella versione CS3 Professional in italiano, è alquanto fastidioso e pericoloso. Occhio al seguente codice:
1 2 3
| private function getRandRange (min:uint,max:uint):uint{
return( uint(Math.floor(Math.random() * (max - min +1)) + min) );
} |
Dopo la formattazione automatica:
1 2 3
| private function getRandRange (min:uint,max:uint):uint {
return uint(Math.floor(Math.random() * max - min + 1) + min);
} |
Ha tolto le parentesi nel calcolo max-min+1!! Che, ovviamente, non restituisce più il valore corretto!! La parentesi, infatti, è vitale in quanto permette di moltiplicare Math.random() per l’intero risultato dell’espressione (max-min+1). Nel secondo caso, dopo che il codice è stato “sformattato”, Math.random() viene moltiplicato “solo” per max e poi, al risultato di questa moltiplicazione, viene sottratto (min+1)!! L’ho spiegato solo per esigenze di completezza… ma credo che era chiaro a tutti…
Evidentemente in casa Adobe pensano davvero che la matematica sia un opinione!?
Questo è un baco pericoloso su codici corposi… se la formattazione “sconvolge” il codice, diventa un serio problema andare a rimettere tutto a posto!! Spero che Adobe fornisca al più presto una patch!!! Quindi ATTENZIONE!! Fatemi sapere se lo fa anche a voi, alla vostra versione…
Continua...

È stata rilasciata la beta 0.6 del componente UMAP per Flash CS3 (Actionscript 3.0) – nel pacchetto è presente anche la versione per Flex. Tra le novità notiamo l’adozione di OpenStreetMap come provider predefinito. Inoltre è stato aggiunto un avanzato gestore dei Marker e una serie di ottimizzazioni varie.
Continua...
Grandi novità per gli sviluppatori AIR. È stata rilasciata finalmente la versione 1.0! Fine della beta quindi! Nuove SDK (vitali per la compilazione in ambienti come Aptana Studio, Eclipse, etc…) e aggiornamento delle estensioni per Dreamweawer e Flash CS3 Professional in italiano! Fino a ieri, infatti, non era possibile sviluppare un’applicazione AIR con Flash CS3 Professione in italiano. Ora il nuovo menu per la creazione di RIA AIR è disponibile e funzionante! Potete trovare tutte gli aggiornamenti (fix della sicurezza ed estensioni) direttamente sul sito.
Altra novità è il lancio ufficiale di Adobe Open Source, il nuovo sito che terrà traccia di tutte le novità nell’ambito dell’open source Adobe e non solo. Diventa questo, quindi, il punto di riferimento degli sviluppatori che potranno travare interessanti contributi con demo, codici sorgente e molto altro, come il supporto per i progetti open Tamarin e BlazeDS.
Prossimamente vedremo come sviluppare una semplice applicazione AIR con Flash e Dreamweaver!
Continua...
Ecco una dimostrazione di quanto è semplice sviluppare applicazioni in Flash CS3. Dopo le varie discussioni sullo sviluppo di uno strumento “erase”, propongo una semplice applicazione che implementa in modo completo alcune delle cose dette nei precedenti Post. In questo esempio ho inserito una ToolBar “draggabile”, la possibilità di scegliere il colore del pennello e quello di sfondo, la selezione dello strumento “erase” e un leggero effetto “blur” durante il disegno!
Scarica il sorgente per Adobe Flash CS3 Professional
Continua...
Lavorando con il testo statico ho scoperto un cuorioso difetto su Adobe Flash CS3 Professional. Inserendo un testo statico in un filmato e inclinandolo (skew), si ottengono risultati diversi, quando si manda in esecuzione il filmato, in base all’impostazione dell’antialiasing:

Nell’ambiente authoring di Flash, invece, l’anteprima è identica per entrambe le scelte di antialiasing. Nell’esempio mostrato qui sopra ho usato un Font Arial. Tuttavia il problema si presenta con qualsiasi Font, anche quelle Bitmap. Lo stesso difetto si presenta anche inserendo il testo statico all’interno di un MovieClip e inclinando quest’ultimo invece del testo vero e proprio. (??)
Continua...
Partendo 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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
| import flash.events.MouseEvent;
import flash.display.BitmapData;
import flash.display.Bitmap;
import flash.display.GradientType;
//
import flash.geom.Matrix;
//
var md :Boolean = false;
//
var event_spr :Sprite = new Sprite();
addChild (event_spr );
//
var area_width :Number = event_spr .stage.stageWidth;
var area_height :Number = event_spr .stage.stageHeight -32;
//
var fillType :String = GradientType.LINEAR;
var colors:Array = [0xFF0000 , 0x00FF00 , 0x0000ff ];
var alphas:Array = [1, 1, 1];
var ratios:Array = [0, 128, 255];
var spreadMethod :String = SpreadMethod.PAD;
var matrix:Matrix = new Matrix();
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
event_spr .addEventListener (MouseEvent.MOUSE_DOWN, _onMouseDown );
event_spr .addEventListener (MouseEvent.MOUSE_MOVE, _onMouseMove );
event_spr .addEventListener (MouseEvent.MOUSE_UP, _onMouseUp );
event_spr .addEventListener (MouseEvent.MOUSE_OUT, _onMouseUp );
//
var bmpd :BitmapData = new BitmapData(event_spr .width,event_spr .height,true,0);
var bmp :Bitmap = new Bitmap(bmpd );
addChild (bmp );
//
// shape temporanea
var draw_shape :Shape = new Shape();
addChild (draw_shape );
//
// shape, non visibile, usata per la "cancellazione"
var erase_shape :Shape = new Shape();
//
function _onMouseDown (e :MouseEvent):void {
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;
}
//
function _onMouseUp (e :MouseEvent):void {
md = false;
bmp .bitmapData.draw (draw_shape );
draw_shape .graphics.clear ();
erase_shape .graphics.clear ();
}
//
function _onMouseMove (e :MouseEvent):void {
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");
}
}
//
function debug (v :String):void {
var d:Date = new Date();
trace (d.getMinutes()+":"+d.getSeconds()+":"+d.getMilliseconds()+": "+v );
} |
È stata aggiunta una nuova Shape, erase_shape, non visibile (non è stato effettuato nessun addChild()):
1 2 3
| ...
// shape, non visibile, usata per la "cancellazione"
var erase_shape :Shape = new Shape(); |
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:
1 2 3
| ....
erase_shape.graphics.lineTo (e.localX,e.localY);
bmp.bitmapData.draw (erase_shape,null,null,"erase"); |
Continua...
Come esposto in Actionscript Flash contest: erase tool non è possibile “cancellare” una particolare zona di uno Sprite, MovieClip o Shape su cui sono state tracciate linee o rettangoli tramite il puntatore graphics. Esiste, infatti, il solo metodo clear() che, tuttavia, ha effetto sull’intera area del nostro oggetto. La soluzione al problema risiede nella possibilità di usare gli oggetti Bitmap e BitmapData. Come vedremo possiamo accedere direttamente ai dati Bitmap e manipolarli in modo da “cancellare” i tratti con un vero e proprio strumento “cancellino”.
Presenterò due metodi diversi per realizzare il “cancellino”. Il primo “disegna” (cancella) i dati direttamente nella BitmapData, sfruttando il metodo fillRect() – si può usare anche setPixel() per esempio. Il secondo metodo, quello che preferisco, sfrutta i metodi di fusioni (blendMode).
Prima di tutto vediamo che tipo di organizzazione minimale è necessaria per realizzare un semplice Painter in Flash. Lo schema presentato qui sotto vale per entrambe le proposte del “cancellino”:

Ho creato tre layer: il primo, MovieClip o Sprite, funziona da sfondo e gestore eventi (MouseDown, MouseMove e MouseUp). Il secondo, la Bitmap, è il nostro layer principale, quello che conterrà effettivamente la grafica disegnata e su cui sarà applicata la funzione “cancellino”. Il terzo e ultimo layer, lo Shape, risolve due questioni: la prima è che permette di utilizzare direttamente le funzioni messe a disposizione dal puntatore graphics (come lineStyle, drawRect(), ecc…). Inoltre aumenta le performance durante il tracciamento grafico, come spiegato in dettaglio più sotto.
Continua...
Ultimi Commenti
Marco: Ti ringrazio moltissimo, mi hai illuminato
ho risolto impostando [cc_objc] //OptionViewController.m -...
Giovambattista Fazioli: @Marco: Ti consiglio un approccio credo più corretto. Se hai eseguito il subclass del tab...
Marco: Scusa lo spam.. ho notato che c’è un errore.. ecco la correzione [cc_objc] /** PrimaClasse.h **/ #import...
Marco: dimenticato.. in [cci]OptionViewController[/cci ] il [cci]@syntetize[/cci] del delegato l’ho messo
luigi: molto chiaro e semplice devo ammettere che anche scrivendo da un pà difficilmente uso delegati creati da...