Categoria ‘Actionscript 3.0’


Paint-o-matic

Per completezza, in relazione a Painting Flash CS3: effetti con le matrici Matrix voglio sottolineare che le Matrix non sono necessarie per il comportamento indicato nel precedente post. Infatti vediamo nell’esempio qui sotto:

Loading Flash Player...

Il codice, leggermente diverso da quello precedente, è il seguente:

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
/*
** Actionscript 2.0 code
*/

import flash.events.MouseEvent;
import flash.geom.Matrix;
// flag per il detect del mousedown
var md:Boolean = false;
// creo una lavagna front
var lvg1:Sprite = new Sprite();
lvg1.graphics.lineStyle(0,0xffffff);
lvg1.graphics.beginFill(0x666666);
lvg1.graphics.drawRect(0,0,199,199);
lvg1.graphics.endFill();
addChild(lvg1);
lvg1.x = lvg1.y = 30;
// creo la lavagna inclinata
var lvg2:Sprite = new Sprite();
lvg2.graphics.lineStyle(0,0xffffff);
lvg2.graphics.beginFill(0x666666);
lvg2.graphics.drawRect(0,0,199,199);
lvg2.graphics.endFill();
lvg2.x = 400;
lvg2.y = lvg1.y;
lvg2.rotation = 45;
lvg2.scaleX = lvg2.scaleY = .6;
addChild(lvg2);
//
// paint event
lvg1.addEventListener (MouseEvent.MOUSE_DOWN, _onMouseDown);
lvg1.addEventListener (MouseEvent.MOUSE_MOVE, _onMouseMove);
lvg1.addEventListener (MouseEvent.MOUSE_UP, _onMouseUp);
//
function _onMouseDown (e:MouseEvent):void {
    trace("_onMouseDown");
    var c:uint = 0xffffff;
    e.target.graphics.lineStyle (10,c,1);
    lvg2.graphics.lineStyle (10,c,1);
    e.target.graphics.moveTo (e.localX,e.localY);
    lvg2.graphics.moveTo (e.localX,e.localY);
    md = true;
}
//
function _onMouseUp (e:MouseEvent):void { md = false; }
//
function _onMouseMove (e:MouseEvent):void {
    trace("_onMouseMove");
    if (md)  {
        e.target.graphics.lineTo (e.localX,e.localY);
        lvg2.graphics.lineTo (e.localX,e.localY);
    }
}

In questo caso le righe dalla 22 alla 25 dimostrano che anche con semplici rotazione e spostamenti l’effetto si ripete.

Continua...

Painting Flash CS3: effetti con le matrici Matrix

Giocherellando con il potente e versatile oggetto Matrix (matrice), legato alla trasformazioni, è possibile fare cose bizzarre. Questi strumenti sono utilizzati per applicare particolari trasformazioni ad un oggetto visivo, come ad esempio un Sprite. È possibile, ad esempio, scalare, ruotare o distorcere (skew) uno Sprite. Mentre per le prime due funzioni (scala e rotazione) gli oggetti Sprite (e non solo) mettono a disposizione direttamente delle proprietà (scaleX/scaleY e rotation), per l’effetto Skew bisogna ricorrere direttamente alle matrici. Quello che vorrei sottolineare qui è che quando modifichiamo un oggetto grafico tutte le sue coordinate interne sono spostate:

Continua...

Adobe AIR: l’incompreso

Adobe AIRAlcuni, e non a torto, discutono sull’utilità di Adobe AIR, Adobe Integrated Runtime (ex Apollo) proposto da Adobe. Di che stiamo parlando? Dopo tutto AIR è ancora una beta (l’ultima release è del 12/12/2007 – la beta 3) e il suo successo, vedremo se compreso o meno, dipende da molti fattori.

Continua...

Actionscript Flash contest: erase tool

Premetto subito: non si vince nulla! A parte l’orgoglio – caso mai – di aver risolto il problema.

QUEST – DOMANDA

Come si realizza un tool per cancellare, eliminare, ripulire, una “porzione” della grafica disegnata con le API di Actionscript 3.0?

Con Actionscript 3.0 alcuni oggetti visivi, come i MovieClip o gli Shape, espongono la proprietà graphics, un puntatore ad un altro oggetto che “serve” tutte le funzioni grafiche di disegno runtime. Ad esempio è possibile sviluppare una semplice applicazione di disegno. Questo oggetto graphics permette di disegnare qualsiasi cosa, ad esempio su un oggetto Shape, in modo semplice e rapido. Il problema è che una volta disegnato qualcosa è possibile ripulire tutto ma non una singola parte.

Disegnare una linea è facilissimo:

1
2
3
4
5
6
var myShape:Shape = new Shape();
addChild(myShape);
//
myShape.graphics.lineStyle(2,0xff0000,1);
myShape.graphics.moveTo(0,0);
myShape.graphics.lineTo(100,100);

Disegnato qualcosa è possibile ripulire tutto con la semplice chiamata al metodo clear():

1
myShape.graphics.clear();

Ma se voglio “cancellare” solo un punto? Oppure dalle coordinate 50,50 a 100,100?

Cercando su Internet ho trovato numerosi esempi di “applicazioni di disegno” e, in effetti, nessuna supporta o propone lo strumento “cancella”.

Avete qualche soluzione?

Continua...

Yahoo! ASTRA: suite di componenti per Flash e Flex

image Yahoo! ha appena rilasciata ASTRA, una suite di componenti per Adobe Flash e Flex. Devo dire che, almeno per quanto riguarda i componenti per Flash, ho avuto una mezza delusione (se non totale). Il più interessante, forse, è il TabBar… il resto lascia molto a desiderare. Sembrano componenti sviluppati per qualche loro progetto – interno – e ora rilasciati come prodotto open! Forse, in Yahoo!, si sono già allineati alle politiche Microsoft… visto che proprio oggi la software house fondata dal Bill ha offerto 44,6 miliardi di dollari per acquistare Yahoo!! 44,6 miliardi, non ho scritto male!

Tuttavia fatevi un giro sul sito dove si trovano svariate risorse utili. Confidiamo nel futuro prossimo venturo.

Continua...

Actionscript 3.0: tutto con l’operatore new

Sempre nell’ottica di “uniformare”, come già accaduto con gli eventi (vedi La nuova gestione degli eventi di Flash CS3 e Flash CS3: la nuova gestione degli eventi), una delle tante novità presenti in Actionscript 3.0 è la scomparsa di tutti quei metodi ad hoc dedicati alla creazione di particolari oggetti, come: createEmptyMovieClip() o il famosissimo attachMovie(). Con Actionscript 3.0 l’operatore new è sufficiente a svolgere tutte le operazioni di creazione. Un nuovo MovieClip, ad esempio, viene creato (runtime) con il seguente codice:

1
2
var mioClip:MovieClip = new MovieClip();
addChild(mioClip);

image Ma veniamo al dunque! Se ho un simbolo nella libreria e voglio aggiungerlo runtime come procedo se attachMovie() è scomparso? La soluzione non è molto dissimile da quello che accadeva in Actionscript 2.0. Prima di tutto bisogna andare nel pannello di libreria, selezionare il simbolo e aprire la finestra proprietà. A questo punto spuntare la casella di concatenamento Esporta per ActionScript – come accadeva in Flash 8. Un simbolo di libreria ha sempre come Classe base flash.display.MovieClip, ma questo non ci interessa granchè. La cosa interessante, invece, è il parametro Classe che viene impostato di default (quando si spunta Esporta per ActionScript) con il nome del simbolo. Quello che è importante sottolineare è che questa è una nuova modalità di Flash CS3 (e quindi ActionScript 3.0). Il simbolo, per essere esportato, deve avere una Classe di riferimento. La curiosità risiede nel fatto che non siamo costretti a creare per forza una nostra Classe (estesa da flash.display.MovieClip), anche se potremmo farlo.

Continua...

La nuova gestione degli eventi di Flash CS3

Ne avevo già parlato in Flash CS3: la nuova gestione degli eventi. Torno sulla questione per sottolieare la differenza di questo nuovo approccio rispetto alle precedenti versioni di ActionScript. Schematizzando abbiamo una situazione generale di questo tipo:

addEventListener

Ogni oggetto che supporta degli eventi, in definitiva, espone sempre il metodo addEventListener(). Nella documentazione, tra l’altro, leggiamo:

Novità per i listener di eventi in ActionScript 3.0

[...] Per aggiungere listener di eventi in ActionScript 2.0 si usa talvolta addListener() e talvolta addEventListener(), mentre in ActionScript 3.0 si usa addEventListener() in tutte le situazioni.
[..]

La gestione degli eventi, poi, è standardizzata anche a livello di listener vero e proprio. Tutte le “funzioni” di ascolto, infatti, hanno la seguente struttura:

1
2
3
function eventResponse(eventObject:EventType):void {
// Le azioni di risposta agli eventi vanno definite qui.
}

EvenType è sempre un oggetto della classe Event o una sua sottoclasse. Questo permette di ottenere sempre infomazioni specifiche per il particolare evento oltre a manipolare proprietà standard come target o currentTarget.

Un’importante differenza con le precedenti versioni di Actionscript, riguardo ai listener, è che:

In ActionScript 2.0, i listener di eventi possono essere funzioni, metodi oppure oggetti mentre in ActionScript 3.0 possono essere listener di eventi solo funzioni o metodi.

Insomma, avendo usato per un bel po’ di tempo la struttura ad eventi delle precedenti versioni di Flash, devo dire che questo nuovo approccio è davvero piacevole. È un po’ che sviluppo con Actionscript 3.0 e, dopo un piccolo smarrimento iniziale (giusto per ritrovare ciò che prima era scontato) ora non capisco proprio come facevo a sopportare il “vecchio” metodo degli eventi delle precedenti versioni.

Continua...

Google Maps component per Flash

AFComponents UMAP

Google ha reso disponibile le API – in Javascript – per inserire le sue mappe in qualsiasi sito Web. Viediamo come realizzare la stessa cosa con Flash!

image Partiamo da un componente gratuito, UMAP (Universal ActionScript 3.0 Mapping API  – integrated with Google Maps), sviluppato da AFComponents, una società verticalizzata su componenti per Flash/Flex davvero interessanti e a prezzi accessibili. Sul sito, dove è necessario registrarsi per usufruire dei download gratuiti, sono presenti anche le versioni di UMAP per ActionScript 2.0: G MAP Ver.2.6.1. In questo caso noi analizzeremo la versione 0.4 Beta di UMAP per ActionScript 3.0 (all’interno del pacchetto c’è anche il componente Flex). Questa che andremo a vedere è – evidentemente – una versione beta e manca, quindi, di alcune funzionalità presenti nella versione per Actionscript 2.0 (G MAP Ver.2.6.1). Tuttavia, gurdando al futuro, mi sembra più interessante focalizzare l’attenzione su questa release; le ho provate entrambe e, nonostante la maggiore completezza della release per Actionscript 2.0, la versione beta per Actionscript 3.0 è notevolmente più performante.

Continua...

Lettera a Babbo Adobe: Flash CS3, qualche baco e difetto

Carissimo Babbo Adobe,
nonostante abbia già ricevuto due patch per Flash CS3 (versione 9.0.2), alcuni problemini nel suo utilizzo sono apparsi come in tutti i software del mondo, soprattutto in questa release che di cambiamenti ne ha subiti davvero tanti.

  • L’editor ActionScript, ad esempio, risulta lento e scattoso! Considera, caro Babbo Adobe, che la mia macchina ha 8Gbyte di Ram e un Intel core duo quad!
  • Durante la formattazione automatica, righe di codice come questa qui sotto, vengono “fraintese” e riformattate male:
1
mybtn.addEventListener (MouseEvent.CLICK, function(e) { myfunc(); } );

Aggiungendo parentesi graffe dove non andrebbero:

1
2
mybtn.addEventListener (MouseEvent.CLICK, function(e) { myfunc(); } );
}; // < -- chi te l'ha detto?!

Quindi meglio usare la sintassi:

1
conn_btn.addEventListener (MouseEvent.CLICK, _onClick );
  • Le finestre docket, almeno nell’implementazione su Windows Vista, ogni tanto spariscono sotto altri pannelli… La finestra di Aiuto, la guida insomma, crea qualche problema quando si prova un progetto. Quest’ultimo, infatti, scompare dietro agli altri pannelli… mistero! Tuttavia questo difetto, come altri, non è sempre riproducibile.
  • Anche i componenti hanno strani comportamenti: a volte vengono mostrati, in design-time, come rettangoli bianchi… continuando comunque a funzionare a runtime!
    Missing Components
  • L’anterprima Scale9Grid, indicata come nuova nella documentazione e in grado di mostrare gli oggetti ridimensionati correttamente anche a design-time, continua ad essere afflitta dagli stessi problemi della precedente versione! Peccato!
    Scale9Grid

Comunque a Natale sia tutti più buoni… quindi, caro Babbo Adobe, aspettiamo con ansia futuri aggiornamenti.

Continua...

Flash CS3: la nuova gestione degli eventi

Finalmente con ActionScript 3.0 non abbiamo più due diverse gestioni di eventi come accadeva prima di ActionScript 2.0 (vedi: Gestione degli eventi: similitudini tra Flash e Javascript). Il metodo addEventListener(), onnipresente nella nuova architettura, permette di gestire in modo nuovo e straordinariamente pulito tutti gli eventi possibili, anche quelli personali. La nuova organizzazione in package permette di importare gli eventi che ci servono e trattarli tutti allo stesso modo:

1
2
3
4
// Events
import flash.events.KeyboardEvent;
import flash.events.MouseEvent;
import flash.events.Event;

Continua...



Stop SOPA