Categoria ‘Tutorials’
Rispondo, con questo post, alla richiesta di Andrea su come inserire il traduttore di Google nel proprio web. Esistono vari modi per usufruire dei servizi di traduzione automatica messi a disposizione da Google e non solo. Possiamo usare Plugin scritti da terzi, un semplice script Javascript preconfezionato da Google stessa o imparare ad usare le API, cioè una serie di funzioni richiamabili – come vedremo – in vari modi.
Plugin
Su questa soluzione non mi dilungo, in quanto credo non sia propriamente attinente alla richiesta di Andrea, se ho compreso bene. Inoltre è una soluzione sostanzialemente valida solo per i Blog e non per un uso personalizzato e generico. Posso solo segnalare, per gli utenti WordPress, Global Translator, forse il più semplice, funzionale e diffuso Plugin di questo tipo.
Script preconfezionato da Google
Il modo più semplice per tradurre il proprio sito web o il proprio Blog è quello di inserire un semplice script Javascript fornito da Google stessa. Basta andare sul sito translate.google.com e cliccare sulla scheda ‘Strumenti‘. Da questa pagina è possibile preimpostare le funzioni di traduzione o lasciare quelle di default. Lo script è molto semplice:
1
| <script src="http://www.gmodules.com/ig/ifr?url=http://www.google.com/ig/modules/translatemypage.xml&up_source_language=it&w=160&h=60&title=&border=&output=js"></script> |
e come risultato si ottiene:

Continua...
AS3corelib project è una libreria scritta in ActionScript 3 che contiene una serie di classi e utilities per estendere lo sviluppo con ActionScript 3. È incluso il supporto per la codifica MD5 e SHA 1, encoders per JPG e PNG, e la serializzazione JSON per stringhe, numeri e Date APIs. Questa libreia risulta davvero utile nello sviluppo di applicazioni Flash e riesce ha dare il meglio di sè in accoppiata con Adobe AIR!
Dei vari package presenti i più interessanti sono com.adobe.crypto e com.adobe.images. Il primo permette di gestire le codifiche MD5, SHA1, SHA224 e SHA256, in modo davvero semplice: tramite il metodo hash() si passa la stringa-sorgente e viene restituita la codifica! Il pacchetto images permette addirittura di ottenere l’encoder JPG o PNG a partire da una semplice bitmap Flash!
Il risultato ByteArray rappresenta l’encoding JPG che, Flash permettendo, può essere salvato direttamento su disco! Per saperne di più potete seguire questo tutorial video su come memorizzare un’immagine PNG – a partire da un oggetto video – su disco tramite as3corelib.
Continua...
Con Adobe Flash CS3 l’uso delle Bitmap è così migliorato che viene subito voglia di creare un piccolo Paint. Abbiamo già visto come realizzare un piccolo Paint (vedi Creare un’applicazione Paint in Flash CS3 Painter: semplice applicazione per disegno in Flash CS3 Pro) in grado di supportare un vero e proprio “cancellino” – funzione erase, grazie ad un uso particolare di layer Shape e Bitmap. Diciamo subito che Flash (a differenza di Flex) non permette ne encoding (tipo JPG o PNG) ne salvataggio automatico di immagini Bitmap. Tuttavia si può aggirare l’ostacolo sfruttando uno scripting lato server e la capacità di Flash di inviare dati in POST.
Continua...
Flash CS3 non finisce di stupire. Ecco come creare il classico effetto nebbia dei televisori in un secondo con 10 righe di codice.
Continua...
Adobe Photoshop è uno strumento potente e permette di realizzare effetti davvero accattivanti. Per realizzare l’effetto di piegatura di un foglio di carta, infatti, possiamo usare lo strumento di trasformazione per "piegare" – davvero – un layer. Con qualche piccolo accorgimento possiamo rendere l’effetto davvero realistico. Le immagini presentate qui di seguito in questo tutorial sono a titolo di esempio e sono state realizzate in bassa risoluzione. Per migliorare l’effetto usare una risoluzione alta, così da ridimensionare l’immagine alla fine e ottenere un antialiasing sui bordi.
Continua...
Questo tutorial in Photoshop dimostra come sia “relativamente” semplice creare delle accattivanti icone stile web 2.0, con riflessi e quant’altro, semplicemente impostando gli effetti sul layer. Una volta compreso il processo, inoltre, è possibile – dando libero sfogo alla vostra creatività – creare numerose varianti.
Continua...

PASSO 1
Create un’immagine di almeno 800×600 pixel. Aggiungete un layer (bck) – che sarà il nostro sfondo – e disegnate lo spazio. Dev’essere un’immagine scura! Potete divertirvi a realizzarla voi o inserire (come ho fatto io) alcune spettacolari immagini della nasa, regolando i livelli in modo che venga comunque scura. Dal menu Filtro selezionate Rendering/Riflesso lente – creiamo il nostro sole! Potete farlo “sorgere” dove volete… io l’ho posizionato al centro verso l’alto dell’immagine:

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...
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...