Archivio

Archive for the ‘ACTIONSCRIPT 3.0’ Category

[AS3] – Come creare un oggetto leggendo il nome della Classe e delle sue proprietà da un file XML.

A volte può esserci l’esigenza di dover generalizzare il processo di creazione degli oggetti, e di conseguenza acquisire i riferimenti delle Classi in maniera dinamica.

La funzione getDefinitionByName() di AS3, presente nel package flash.utils, consente di ottenere un riferimento della Classe, passando, come argomento, il nome della classe ( in formato stringa ).

Una volta acquisito il riferimento alla Classe, l’oggetto potrà essere istanziato utilizzando l’operatore new e la variabile contenente il “reference” della Classe.

// ...
var className         :String;
var classReference    :Class;
var objectReference   :Object;

// ... class name ( string );
// ... nome della Classe ( string )   
className       = flash.display.MovieClip

// ... ottieni il riferimento all'oggetto Class
// ... get Class object reference 
classReference  = Class(getDefinitionByName(className));

// ... crea l'oggetto
// ... create the object
objectReference = classReference(new classReference());

// ... 

 

E’ necessario, comunque, che la Classe venga importata al momento della compilazione del .fla o .as.

Nota : la maggior parte delle classi predefinite di AS3 ( presenti nei pacchetti flash.*) sono importate automaticamente dal compilatore. 

 

Per importare in maniera “esplicita” una Classe ( propria o tra quelle presenti nei pacchetti di AS3 non caricate automaticamente ) basterà dichiarare una variabile di quel tipo ( di quella Classe ). 

// ...
// ... declare a dummy variable of type : myClass
// ... dichiarazione di una variabile del tipo : myClass 
var dummyRef : myClass;
// ...

 

Ciò servirà ad “avvertire” il compilatore che “intendiamo utilizzare quella Classe” e lo “costringerà” ad importare la definizione della Classe.

Nota : la sola indicazione della dichiarativa import myclass non è sufficiente a far importare la Classe, in quanto, il compilatore, per motivi di ottimizzazione, non importerà la Classe fin tanto che non incontrerà almeno una dichiarazione di variabile di quella Classe.

 

Qui di seguito un esempio che mostra come creare un oggetto il cui nome della Classe ed alcune delle sue proprietà sono lette da un file XML.

// ...................................................................
//   NAME : buildForm.fla
//          QUESTO ESEMPIO MOSTRA COME CREARE UN OGGETTO LEGGENDO IL 
//          NOME DELLA CLASSE E LE SUE PROPRIETA' DA UN FILE XML. 
//
//          THIS EXAMPLE SHOWS HOW TO CREATE AN OBJECT READING CLASS 
//          NAME AND ITS PROPERTIES AS STRINGS FROM AN XML FILE 
//
// 
// sample XML file : 
// 
// <?xml version="1.0" encoding="UTF-8"?>
// <form>
//   <editField className="flash.text.TextField" >
//     <type>input</type>
//     <maxChars>200</maxChars>
//     <text>... that was only yesterday</text>
//     <textColor>0x00CC00</textColor> 
//     <background>true</background> 
//     <backgroundColor>0x333333</backgroundColor> 
//     <border>true</border> 
//     <borderColor>0x888888</borderColor> 
//     <width>300</width> 
//     <height>25</height> 
//     <x>100</x> 
//     <y>50</y> 
//   </editField>
// </form>
//
// ...................................................................
var XMLRequest        :URLRequest; 
var XMLLoader         :URLLoader; 
var XMLObejct         :XML; 
var myObject          :XMLList; 

var classReference    :Class;
var className         :String;
var objectReference   :Object;

var propertyClass     :Class;
var propertyObject    :XML;
var propertyName      :String;
var propertyValue     :String;
var booleanValue      :Boolean;


XMLRequest     = new URLRequest(); 
XMLLoader      = new URLLoader(); 
XMLLoader.addEventListener(Event.COMPLETE, XMLLoaded); 

XMLRequest.url = "form.xml";
XMLLoader.load(XMLRequest);

// ... 

// .................................................. 
//  FUNCTION : XMLLoaded - Event.COMPLETE
// .................................................. 
function XMLLoaded(evento:Event):void  
{
    // ... ACQUISIZIONE DELL'XML  
    // ... GET XML  
    XMLObejct = new XML(XMLLoader.data); 

    // ... ACQUISIZONE DEL TAG <editField>	
    // ... GET <editField> TAG 
    myObject = XMLObejct.editField; 
    // ... oppure  
    // ... or   
    // ... ( myObject = XMLObejct.children()[0]; ) 
	
	
    // ... ACQUISIZIONE DELL'ATTRIBUTO className 
    // ... GET className ATTRIBUTE 
    //     ( es. : <editField className="flash.text.TextField" > ) 
    className       = myObject[0].@className; 
	
    // ... SYSOUT 
    trace("className : " + className);
	
    // ... ACQUISIZIONE DELLA CLASSE 
    // ... GET CLASS REFERENCE 
    classReference  = Class(getDefinitionByName(className));
	
    // ... CREAZIONE DELL'OGGETTO 
    // ... CREATE THE OBJECT 
    objectReference = classReference(new classReference());
	
    // ... LETTURA DELLE PROPRIETA' DELL'OGGETTO  
    // ... READ OBJECT'S PROPERTIES 
    for( var i:int = 0; i < myObject.children().length(); i++ )
    {
        // ... ACQUISIZIONE DEL i-esimo TAG ( PROPRIETA' )        		
        // ... GET i-th TAG ( PROPERTY )  
        //     ( es. : <maxChars>200</maxChars> ) 
        propertyObject = myObject.children()[i];
		
        // ... NOME DEL TAG ( NOME DELLA PROPRIETA' )  
        // ... TAG NAME ( PROPERTY NAME )  
        //     ( es. "maxChars" ) 
        propertyName   = propertyObject.name();
	    
        // ... VALORE DELLA PROPRIETA' 
        // ... PROPERTY VALUE 
        //     ( es. : 200 ) 
        propertyValue  = propertyObject;
		
        // ... SYSOUT 
        trace(propertyName + "=" + propertyValue);
		
        // ... ACQUISISCI LA CLASSE DELLA PROPRIETA' 
        // ... GET PROPERTY CLASS 
        propertyClass = Object(objectReference[propertyName]).constructor;
		
        // ... SYSOUT 
        trace("propertyClass : " + propertyClass);
		
        // ... SE LA PROPRIETA' E' DI CLASSE BOOLEAN, DOBBIAMO CONVERTIRE 
        //     LE STRINGHE "true" O "false" IN BOOLEAN. 
        // ... IF PROPERTY CLASS IS BOOLEAN, WE NEED TO CONVERT 
        //     THE STRINGS VALUES "true" OR "false" IN BOOLEAN. 
        if (propertyClass == Boolean) 
        {
            // ... RICHIAMO DELLA FUNZIONE strToBoolean() PRIMA DEL CASTING 
            // ... CALL strToBoolean() FUNCTION BEFORE CASTING			
            booleanValue                  = strToBoolean(propertyValue);

            // ... ASSEGNAZIONE DEL VALORE DELLA PROPRIETA' (boolean)
            // ... ASSIGN PROPERTY VALUE (boolean) 
            objectReference[propertyName] = propertyClass(booleanValue);
        }
        else 
        {
            // ... ASSGNAZIONE DEL VALORE DELLA PROPRIETA' 
            // ... ASSIGN PROPERTY VALUE  
            objectReference[propertyName] = propertyClass(propertyValue);
        }
    }	
	
    // ... AGGIUNGI L'OGGETTO 
    // ... ADD CHILD 
    addChild(classReference(objectReference));

    // ... 
} 
// ...................................................................


// ...................................................................
//   FUNCTION : strToBoolean() 
//              CONVERTE LE STRINGHE "true" O "false" IN BOOLEAN 
//              CONVERTS THE STRINGS "true" OR "false" INTO BOOLEAN 
// ...................................................................
function strToBoolean(p_string:String):Boolean
{
    var retValue:Boolean;
	
    retValue = false;
    if (p_string == "true" ) 
    { 
        retValue = true;
    }
    return retValue;
}
// ...................................................................

// ... END 
Annunci
Categorie:ACTIONSCRIPT 3.0

[AS3] – Invio e ricezione Array tra FLASH e PHP

Questo esempio mostra come inviare un’Array da FLASH ad uno script PHP e ricevere dallo script PHP un altro Array.
 
Un modo elementare :
Un Array di nomi viene ‘impacchettato’ in un unica stringa con il metodo : join() della Classe String ( tutti gli elementi dell’Array sono concatenati utilizzando un delimitatore ), quindi inviato allo script PHP.

Lo script PHP riceve la stringa, la ‘esplode’ con la funzione : explode() e riottiene l’Array originale.
L’Array (originale) ottenuto è copiato in un nuovo Array e rispedito all’SWF chiamante.
 
 

 

 

// ...............................................................
//   NAME : flashToPhp.fla
//          QUESTO ESEMPIO MOSTRA COME INVIARE E RICEVERE UN ARRAY
//          TRA FLASH ED UNO SCRIPT PHP
// ...............................................................

import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.net.URLVariables;

var richiestaPHP  :URLRequest;
var caricatorePHP :URLLoader;
var varsToPHP     :URLVariables;
var arrayNomi     :Array;

// ... CREAZIONE OGGETTO RICHIESTA DI ESECUZIONE DELLO SCRIPT PHP
richiestaPHP        = new URLRequest("PhpToFLASH_02.php");

// ... CREAZIONE OGGETTO CARICATORE SCRIPT PHP
caricatorePHP       = new URLLoader(richiestaPHP);
// ... CREAZIONE OGGETTO URLVariables PER L'INVIO DELLE VARIABILI
//     ALLO SCRIPT PHP
varsToPHP           = new URLVariables();

// ... IMPOSTAZIONE METODO PASSAGGIO VARIABILI ALLO SCRIPT (GET | POST)
richiestaPHP.method = URLRequestMethod.POST;
// ... FORMATO IN CUI SI DESIDERA RICEVERE I DATI DALLO SCRIPT PHP :

// ... in formato VARIABLES
//     i dati ricevuti sono costituiti da un oggetto :URLVariables
//     che contiene le variabili con codifica URL
caricatorePHP.dataFormat = URLLoaderDataFormat.VARIABLES;

// ... ALTRI FORMATI IN CUI POSSONO ESSERE RICEVUTI I DATI DALLO SCRIPT :
//
//     - in fomato TEXT ( URLLoaderDataFormat.TEXT )
//       i dati sono costituiti da una stringa contenente il testo
//
//     - in formato BINARY ( URLLoaderDataFormat.BINARY )
//       i dati sono costituiti da un oggetto ByteArray

// ... CREAZIONE DELL'ARRAY DA INVIARE ALLO SCRIPT PHP
arrayNomi = new Array();

// ... INIZIALIZZAZIONE
arrayNomi.push('giulio');
arrayNomi.push('alina');
arrayNomi.push('carlo');
arrayNomi.push('anna');

// ...

// ... COMPONENETI PRESENTI SULLO STAGE (per il test) :

// ... UN BUTTON PER L'AVVIO DEL CARICAMENTO DELLO SCRIPT PHP
btn_invia.addEventListener(MouseEvent.CLICK, onClickInvia);

// ... UN CAMPO TextField (multiline) CHE CONTERRA' L'ARRAY
//     RICEVUTO DALLO SCRIPT PHP
kmessaggi.text = "";
// ...

// ...............................................................
//  FUNCTION : onClickInvia() - MouseEvent.CLICK
//             AVVIO CARICAMENTO ED ESECUZIONE DELLO SCRIPT PHP
// ...............................................................
function onClickInvia(evento:MouseEvent):void
{
// ... AVVIO DELLO SCRIPT PHP

// ... 'impacchetta' GLI ELEMENTI DELL'ARRAY IN UN'UNICA
//     STRING, UTILIZZANDO COME DELIMITATORE IL CARATTERE "|"
var stringNomi = arrayNomi.join("|");

// ... DOPO LA join(), L'ARRAY DIVENBTA UN'INICA STRING
// stringNomi = 'giulio|alina|carlo|anna';

// ... ASSEGNAZIONE DELLA VARIABILI DA INVIARE COME PROPRIETA'
//     DELL'OGGETTO URLVariables
varsToPHP.nomi = stringNomi;

// ... AGGIUNTA DELL'ASCOLTATORE EVENTO : OPEN
//     per sapere quando il caricamento dello script PHP è iniziato
caricatorePHP.addEventListener(Event.OPEN, onOpenScript);

// ... AGGIUNTA DELL'ASCOLTATORE EVENTO : PROGRESS
//     per sapere che lo script è in fase di caricamento ed esecuzione
caricatorePHP.addEventListener(ProgressEvent.PROGRESS, onProgressScript);

// ... AGGIUNTA DELL'ASCOLTATORE EVENTO : COMPLETE
//     per sapere quando lo script PHP termina ed i dati saranno dati
//     ricevuti.
caricatorePHP.addEventListener(Event.COMPLETE, onCompleteScript);

// ... AGGIUNTA DELL'ASCOLTATORE EVENTO : IO_ERROR
//     per gestire eventuali errori durante il caricamento o esecuzione
//     dello script PHP.
caricatorePHP.addEventListener(IOErrorEvent.IO_ERROR, onErrorScript);

// ... ASSEGNAZIONE DELL'OGGETTO URLVariables ALLA PROPRIETA' .data
//     DELL'OGGETTO URLRequest ( invio dei dati )
richiestaPHP.data = varsToPHP;

// ... AVVIA LA RICHIESTA DI CARICAMENTO ED ESECUZIONE DELLO SCRIPT PHP
caricatorePHP.load(richiestaPHP);

// ...
}
// ...............................................................

// ...............................................................
//  FUNCTION : onOpenScript() - Event.OPEN
//             NOTIFICATO ALL'AVVIO DEL CARICAMENTO DELLO SCRIPT
// ...............................................................
function onOpenScript(evento:Event):void
{
// ... IL CARICAMENTO ED ESECUZIONE DELLO SCRIPT PHP
//     ( SUL SERVER ) E' AVVIATO
kmessaggi.text = '... avvio caricamento Script PHP';
}
// ...............................................................

// ...............................................................
//  FUNCTION : onProgressScript() - ProgressEvent.PROGRESS
//             EVENTO NOTIFICATO DURANTE IL CARICAMENTO
//             ED ESECUZIONE DELLO SCRIPT PHP
// ...............................................................
function onProgressScript(evento:ProgressEvent):void
{
// ... LO SCRIPT PHP E' IN ESECUZIONE ( SUL SERVER )
kmessaggi.text = '... attendere prego!';
}
// ...............................................................

// ...............................................................
//  FUNCTION : onComplteScript()
//             EVENTO NOTIFICATO AL COMPLETAMENTO DELL'ESECUZIONE
//             DELLO SCRIPT PHP
// ...............................................................
function onComplteScript(evento:Event):void
{
// ... LO SCRIPT PHP E' STATO CARICATO ED ESEQUITO, ED I DATI
//     SONO STATI RICEVUTI ...

// ... CREAZIONE DI UN OGGETTO URLVariables, PASSANDO AL
//     COSTRUTTORE I DATI RICEVUTI DALLO SCRIPT PHP
var varsFromPHP = new URLVariables(evento.target.data);

// ... DICHIARAZIONE DI UNA VARIABILE STRING IN CUI COPIARE
//     LA VARIABILE RICEVUTA DALLO SCRIPT PHP
var stringMessaggi:String;

// ... CREAZIONE DI UN NUOVO ARRAY
var arrayMessaggi :Array = new Array();

// ... ACQUISIZIONE DELLA VARIABILE RICEVUTA
stringMessaggi = varsFromPHP.messaggi;
// ... NOTA : il nome della proprietà messaggi è quello
//            indicato nell'echo dello script PHP

// ... 'spacchetta' LA STRINGA IN ELEMENTI DELL'ARRAY
arrayMessaggi  = stringMessaggi.split("|");

// ... VISUALIZZA GLI ELEMENTI DELL'ARRAY
kmessaggi.text = "";
for (var i=0; i < arrayMessaggi.length; i++)
{
kmessaggi.appendText(arrayMessaggi[i] + "\n");
};

// ... RIMUOVI GLI ASCOLTATORI
caricatorePHP.removeEventListener(Event.OPEN, onOpenScript);
caricatorePHP.removeEventListener(ProgressEvent.PROGRESS, onProgressScript);
caricatorePHP.removeEventListener(Event.COMPLETE, onCompleteScript);
caricatorePHP.removeEventListener(IOErrorEvent.IO_ERROR, onErrorScript);
}
// ...............................................................

// ...............................................................
//  FUNCTION : onErrorScript() - IOErrorEvent.IO_ERROR
//             EVENTO NOTIFICATO IN CASO DI ERRORE DURANTE IL
//             CARICAMENTO DELLO SCRIPT
// ...............................................................
function onErrorScript(evento:IOErrorEvent):void
{
// ... ERRORE DURANTE LA FASE DI CARICAMENTO DELLO SCRIPT
kmessaggi.text = '... errore di caricamento dello script PHP';
}
// ...............................................................

// ... END

 
… lo script PHP

 


<?
// .....................................................
//  NAME : PhpToFLASH_02.php
//         Ricezione ed invio di Array tra FLASH e PHP
// .....................................................

// ... acquisizione delle variabili inviate dall'SWF

// ... la stringa 'impacchettata' contenete l'Array
//     inviato dall'SWF
$stringNomi = $_POST['nomi'];

// ... crea l'Array da ricostruire
$arrayNomi = array();

// ... 'spacchetta' la stringa in elementi dell'Array
$arrayNomi = explode("|", $stringNomi);

// ... l'Array e' stato ricostruito!

// ... crea un nuovo Array, quello che verra' rispedito
//     all'SWF
$arrayMessaggi = array();

// ... copia i nomi presenti nell'Array ricevuto negli
//     elementi del nuovo array, aggiugendo '... hello '
for ($i = 0; $i < sizeof($arrayNomi); $i++)
{
$arrayMessaggi[$i] = '... hello ' . $arrayNomi[$i];
}

// ... 'impacchetta' l'Array in una stringa da rispedire
//     all'SWF
$stringMessaggi = implode("|", $arrayMessaggi);

// ... invia la stringa all'SWF chiamante
echo "messaggi=" . urlencode($stringMessaggi);

// ... la funzione urlencode() effettua l'encoding di
//     una stringa, covertendo la stringa in un formato
//     URL valido (conversione di caratteri speciali).

// ... i caratteri '/', '%', '&', etc..., sono
//     convertiti con il segno % seguito dalla codifica
//     HEX del carattere.

// ... la funzione inversa e' : urldecode()

// ... end of JOB
?>

Categorie:ACTIONSCRIPT 3.0

[AS3] – Invio e ricezione Dati tra FLASH e PHP

L’esempio seguente mostra come inviare una variabile ( il contenuto di un TextField ) ad uno script PHP (Server-Side), e ricevere dallo script PHP un messaggio di risposta.

// .........................................................
//     NAME : FlashPhp.fla
//            ESEMPIO MINIMALISTA DI INVIO E RICEZIONE DATI
//            TRA FLASH E PHP
// .........................................................

// ... IMPORT DELLE CLASSI PER IL CARICAMENTO E LO SCAMBIO
//     DEI DATI CON LO SCRIPT PHP
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.net.URLVariables;

// ... DICHIARAZIONE DELLE VARIABILI RELATIVE AI REFERENCE
//     DEGLI OGGETTI
var phpRequest : URLRequest;
var phpLoader  : URLLoader;
var dataToPHP  : URLVariables;

// ... CREAZIONE DELL'OGGETTO URLRequest PER LA RICHIESTA
//     DI ESECUZIONE DELLO SCRIPT PHP (LATO SERVER)
phpRequest = new URLRequest();

// ... CREAZIONE DELL'OGGETTO URLLoader PER IL CARICAMENTO
//     DELLO SCRIPT PHP (LATO SERVER)
phpLoader  = new URLLoader();

// ... CREAZIONE DELL'OGGETTO URLVariables PER L'INVIO
//     DELLE VARIABILI DA FLASH A PHP
dataToPHP  = new URLVariables();

// ... IMPOSTAZIONE DEL METODO DI PASSAGGIO DELLE VARIABILI
//     (GET | POST)
phpRequest.method = URLRequestMethod.POST;

// ... ASSEGNAZIONE DEL TIPO DI FORMATO IN CUI SI DESIDERA
//     RICEVERE I DATI DALLO SCRIPT PHP :

// ... in formato VARIABLES :
//     (i dati ricevuti sono costituiti da un oggetto URLVariables
//      che contiene le variabili con codifica URL)
phpLoader.dataFormat = URLLoaderDataFormat.VARIABLES;

// ... altri modi in cui possono essere ricevuti i dati
//     dallo script PHP :

//     - in formato testo (URLLoaderDataFormat.TEXT)
//       i dati sono costituiti da una stringa contenente il testo

//     - in formato binaro (URLLoaderDataFormat.BINARY)
//       i dati sono costituiti da un oggetto di Classe ByteArray

// ***

// ... I COMPONENTI PRESENTI SULLO STAGE (per il test) :

// ... UN TextField PER L'IMMISSIONE DI UN CAMPO DA INVIARE
//     ALLO SCRIPT PHP
nickName.text = "";

// ... UN TextField CHE CONTERRA' IL MESSAGGIO RICEVUTO
//     DALLO SCRIPT PHP
msg.text      = "";

// ... UN Button PER L'AVVIO DEL CARICAMENTO ED ESECUZIONE
//     DELLO SCRIPT PHP (sul server)
btn_Send.addEventListener(MouseEvent.CLICK, onClickSend);

// ...

// .........................................................
//     FUNCTION : onClickSend() - MouseEvent.CLICK
//                AVVIO DEL CARICAMENTO ED ESECUZIONE DELLO
//                SCRIPT PHP SUL SERVER
// .........................................................
function onClickSend(evento:MouseEvent):void
{
    // ... PREPARAZIONE DEI DATI DA INVIARE ALLO SCRIPT PHP

    // ... ASSEGNAZIONE DELLE VARIABILI DA INVIARE
    //     (come proprietà dinamiche dell'oggetto : URLVariables)
    dataToPHP.nickname = nickName.text;
    // ... etc..

    // ... AGGIUNTA DEGLI ASCOLTATORI PER LA GESTIONE DEGLI EVENTI :

    // ... AGGIUNTA DELL'ASCOLTATORE PER LA GESTIONE
    //     DELL'EVENTO : COMPLETE
    //     (la funzione sarà invocata al termine dell'esecuzione
    //      dello script PHP ed eventuali dati, inviati da questi,
    //      saranno pervenuti)
    phpLoader.addEventListener(Event.COMPLETE, onCompleteScript);

    // ... AGGIUNTA DELL'ASCOLTATORE PER LA GESTIONE
    //     DELL'EVENTO : IO_ERROR
    //     (la funzione sarà invocata in caso di errore durante
    //      il caricamento dello script PHP)
    phpLoader.addEventListener(IOErrorEvent.IO_ERROR, onErrorScript);

    // ... AGGIUNTA DELL'ASCOLTATORE PER LA GESTIONE
    //     DELL'EVENTO : OPEN
    //     (la funzione sarà invocata quando il caricamento
    //       dello script PHP e' iniziato)
    phpLoader.addEventListener(Event.OPEN, onOpenScript);

    // ... AGGIUNTA DELL'ASCOLTATORE PER LA GESTIONE
    //     DELL'EVENTO : PROGRESS
    //     (la funzione sarà invocata durante il caricamento
    //      dello script PHP)
    phpLoader.addEventListener(ProgressEvent.PROGRESS, onProgressScript);

    // ... ASSEGNAZIONE DELL'OGGETTO: URLVariables ALLA
    //     PROPRIETA' .data DELL'OGGETTO : URLRequest
    phpRequest.data = dataToPHP;

    // ... ASSEGNAZIONE DELLO SCRIPT PHP ALLA PROPRIETA' .url
    //     DELL'OGGETTO : URLRequest
    phpRequest.url  = "flashPhp.php";

    // ... AVVIO DELLA RICHIESTA DI CARICAMNETO ED ESECUZIONE
    //     DELLO SCRIPT PHP SUL SERVER
    phpLoader.load(phpRequest);

    // ...
}
// .........................................................

// .........................................................
//     FUNCTION : onCompleteScript() - Event.COMPLETE
//                EVENTO NOTOFICATO AL COMPLETAMENTO ED
//                ESECUZIONE DELLO SCRIPT PHP SUL SERVER
// .........................................................
function onCompleteScript(evento:Event):void
{
    var dataFromPHP : URLVariables;
    var msgFromPHP  : String;

    // ... LO SCRIPT PHP E' STATO CARICATO ED ESEGUITO, ED
    //     I DATI SONO STATI RICEVUTI!

    // ... CREAZIONE DI UN OGGETTO : URLVariables IN CUI
    //     ACQUISIRE I DATI RICEVUTI DALLO SCRIPT PHP
    //     (al metodo costruttore viene passato come argomento
    //      la proprietà .data contenente i dati ricevuti)
    dataFromPHP = new URLVariables(evento.target.data);

    // ... ACQUISIZIONE DELLE VARIABILI INVIATE DALLO SCRIPT PHP
    //     (il nome della proprieta' .messaggio e' quello
    //      indicato nell'echo dello script PHP)
    msgFromPHP = dataFromPHP.messaggio;
    // ... etc..

    // ... VISUALIZZAZIONE
    msg.text = String(dataFromPHP.messaggio);
    // ... etc..

    // ... RIMOZIONE DEGLI ASCOLTATORI
    phpLoader.removeEventListener(Event.COMPLETE, onCompleteScript);
    phpLoader.removeEventListener(IOErrorEvent.IO_ERROR, onErrorScript);
    phpLoader.removeEventListener(Event.OPEN, onOpenScript);
    phpLoader.removeEventListener(ProgressEvent.PROGRESS, onProgressScript);
}
// .........................................................

// .........................................................
//     FUNCTION : onErrorScript() - IOErrorEvent.IO_ERROR
//                EVENTO NOTIFICATO IN CASO DI ERRORE DI
//                CARICAMENTO DELLO SCRIPT PHP SUL SERVER
// .........................................................
function onErrorScript(evento:IOErrorEvent):void
{
    // ... SI E' VERIFICATO UN ERRORE DURANTE IL CARICAMENTO
    msg.text = '... errore caricamento Script PHP';
}
// .........................................................

// .........................................................
//     FUNCTION : onOpenScript() - Event.OPEN
//                EVENTO NOTIFICATO ALL'AVVIO DEL CARICAMENTO
//                DELLO SCRIPT PHP SUL SERVER
// .........................................................
function onOpenScript(evento:Event):void
{
    // ... AVVIO RICHIESTA CARICAMENTO ED ESECUZIONE
    //     DELLO SCRIPT PHP SUL SERVER
    msg.text = '... avvio caricamento Script PHP.';
}
// .........................................................

// .........................................................
//     FUNCTION : onProgressScript() - ProgressEvent.PROGRESS
//                EVENTO NOTIFICATO DURANTE I CARICAMENTO
//                DELLO SCRIPT PHP SUL SERVER
// .........................................................
function onProgressScript(evento:ProgressEvent):void
{
    // ... LO SCRIPT E' IN ESECUZIONE SUL SERVER
    msg.text = '... attendere, prego.';
}
// .........................................................

// ... END

… lo script PHP

<?
    // .....................................................
    //  NAME : flashPhp.php
    //         ESEMPIO DI SCAMBIO DATI TRA FLASH E PHP
    // .....................................................

    // ... acquisizione delle variabili inviate dall'SWF

    // ... il nick name
    $nickName   = $_POST['nickname'];
    // ... etc..

    // ... prepara risposta
    $msg        = '... hello ' . $nickName;

    // ... invia messaggio di ritorno all'SWF chiamante
    echo "messaggio=" . urlencode($msg);

    // ... la funzione urlencode() effettua l'encoding di una
    //     stringa, covertendo la stringa in un formato URL
    //     valido (conversione di caratteri speciali).

    // ... i caratteri '/', '%', '&', etc..., sono convertiti
    //     con il segno % seguito dalla codifica HEX del
    //     carattere.
    //     ( la funzione inversa e' : urldecode() )

    // ... end of script
?>

Categorie:ACTIONSCRIPT 3.0

[AS3] – Analizzatore di Spettro Audio (Parte I)

26 settembre 2008 2 commenti

 
Questo esempio mostra come realizzare un semplice Analizzatore di Spettro Audio con effetti di sfocatura ( Classe : BlurFilter ), trasformazione del colore ( Classe : ColorMatrixFilter ), ed “avanzamento” della curva.

 

… click sull’immagine

… il codice

// .......................................................
// PROGRAM-ID.    SOUND010.fla
//
// AUTHOR.        silver peacock.
// DATE-WRITTEN.  10/06/2008
// DATE-COMPILED. 25/09/2009
//
// REMARKS.       Analizzatore di Spettro Audio.
//                Questo esempio mostra come acquisire i
//                valori della forma d'onda di un audio in
//                riproduzione con il metodo statico
//                computeSpectrum() della classe SoundMixer
//                e disegnare un grafico corrispondente in
//                un oggetto BitMapData con effetti di
//                sfocatura (BlurFilter) e trasformazione
//                del colore (ColorMatrixFilter).
// .......................................................

import flash.media.Sound;
import flash.utils.ByteArray;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.filters.BlurFilter;
import flash.filters.ColorMatrixFilter;

// ... dichiarazione variabili globali :
var audio       :Sound;
var byteArray   :ByteArray;

var bitMapData  :BitmapData;
var bitMap      :Bitmap;

var curva       :Sprite;
var filtro      :BlurFilter;
var mtxColori   :ColorMatrixFilter;

var box         :Sprite;

var x_0         :Number;
var y_0         :Number;
var xx          :Number;
var yy          :Number;
var coef_x      :uint;
var coef_y      :uint;

// ... crea gli oggetti :

// ... l'oggetto Sound
audio    = new Sound(new URLRequest("Heartbreaker.mp3"));

// ... l'oggetto ByteArray che sara' passato come
//     argomento al metodo statico computeSpectrum()
//     della Classe SounMixer che lo valorizzerà con 512
//     valori a virgola mobile, di cui i primi 256 valori
//     rappresentano il canale sinistro e gli altri 256
//     valori il canale destro.
//
// ... nota : i valori caricati nel ByteArray sono
//     "normalizzati" e compresi tra : -1.0 a +1.0
//     ( vedere la guida in linea )
byteArray   = new ByteArray();

// ... l'oggetto BitmapData (lo sfondo) su cui disegnare
// ... al metodo costruttore sono passati come argomenti :
//     larghezza, altezza, trasparenza e colore.
bitMapData = new BitmapData(400, 200, true, 0x00000000);

// ... la BitMap relativa
bitMap     = new Bitmap(bitMapData);

// ... l'oggetto Sprite
curva      = new Sprite();

// ... l'ggetto BlurFilter per creare l'effetto sfocatura.
// ... al costruttore sono passati come argomenti :
//     quantita' di sfocatura orizzontale, quantita' di
//     di sfocatura verticale e numero di operazioni di
//     sfocatura da ripetere (qualita' della sfocatura)
filtro     = new BlurFilter(2, 2, BitmapFilterQuality.LOW);

// ... l'oggetto ColorMatrixFilter per creare l'effetto di
//     trasformazione dei Colori.
// ... al costruttore viene passato un'Array di 20
//     elementi (una matrice 4x5) corrispondenti ai valori
//     per la trasformazione del colore ed alpha (RGBA)
mtxColori  = new ColorMatrixFilter([1,0,0,0,0,
					  				0,1,0,0,0,
									0,0,2,0,0,
									0,0,0,0.98,0]);

// ... crea un oggetto contenitore della BitMap
box        = new Sprite();
box.graphics.clear();
box.graphics.beginFill(0x666666, 1);
box.graphics.drawRect(0, 0, bitMap.width, bitMap.height);
box.graphics.endFill();

// ... imposta le posizioni iniziali del grafico
x_0    = 0;
y_0    = (bitMap.height/2);

// ... imposta i coefficienti moltiplicativi per ottenere
//     le coordinate x ed y a partire dai valori della
//     forma d'onda presenti nel ByteArray (-1.0 e + 1.0)
coef_x = 20;
coef_y = 80;

// ... aggiungi la BitMap al box (contenitore)
box.addChild(bitMap);

// ... aggiungta la cura al box
box.addChild(curva);

// ... posiziona ed aggiungi il box allo Stage
box.x   =  -1;
box.y   = 100;

addChild(box);

// ... aggiungi l'ascoltatore evento : ENTER_FRAME
// ... la funzione sara' richiamata ad ogni riproduzione
//     del frame (fps)
addEventListener(Event.ENTER_FRAME, disegnaAnalizzatore);

// ... ok, avvia il sound!
audio.play(0, 1);

// ...

// .......................................................
//  FUNCTION : disegnaAnalizzatore()
//             acquisizione dei dati realtivi alla forma
//             d'onda e disegno della curva
// .......................................................
function disegnaAnalizzatore(evento:Event):void
{
    // ... pulisci il graphics prima di ridisegnare
    curva.graphics.clear();

    // ... imposta lo stile (spessore e colore)
    curva.graphics.lineStyle(1, 0x99CCFF);

	// ... posiziona la penna
	curva.graphics.moveTo(x_0, y_0);

	// ... carica la forma d'onda del sound nel ByteArray
	SoundMixer.computeSpectrum(byteArray);

	// ... ciclo sugli elementi del ByteArray
	for(var i:uint = 0; i  (bitMap.width-2))
		{
			xx = (bitMap.width-1);
			yy = (bitMap.height/2);
		}

		if (xx == 0)
		{
			yy = (bitMap.height/2);
		}

		// ... calcola la coordinata y :
		//     leggi il valore dal byteArray e moltiplica
		//     per il coefficiente della y.
		// ... nota : i valori presenti nel byteArray sono
		//            compresi tra -1.0 e +1.0
		yy = y_0 + ( byteArray.readFloat() * coef_y );

		// ... traccia la linea fino a
		curva.graphics.lineTo(xx, yy);
	}

	// ... disegna la curva nella bitmap
	bitMapData.draw(curva);

	// ... applica il filtro di sfocatura
	bitMapData.applyFilter(bitMapData, bitMapData.rect,
						   new Point(), filtro);

	// ... applica la matrice di trasfomazione dei
	//     colori
	bitMapData.applyFilter(bitMapData, bitMapData.rect,
						   new Point(), mtxColori);

	// ... scroll della bitmapData, per dare l'effetto
	//     di avanzamento (e' lo sfondo che si sposta)
	//     (+ verso destra, - verso sinistra)
	bitMapData.scroll(3,0);
}
// .......................................................

// ... END OF PROGRAM

Categorie:ACTIONSCRIPT 3.0