Come creare un orologio con Flash CS3 - prima parte
This is a discussion on Come creare un orologio con Flash CS3 - prima parte within the Articoli e tutorials forums, part of the Flash CS3 e Actionscript 3.0 category; Ciao a tutti, actionscripters e non...
Vorrei introdurre questa prima parte di un tutorial che arriverà a farvi conoscere ...
Come creare un orologio con Flash CS3 - prima parte
Ciao a tutti, actionscripters e non...
Vorrei introdurre questa prima parte di un tutorial che arriverà a farvi conoscere come poter sviluppare un orologio utilizzando Flash CS3 e PHP
PHP perchè, per fare un bel lavoro, bisogna recuperare il tempo universale in secondi dal server.
Il motivo è semplice, la classe Date di Actionscript 3.0 non è sufficiente in quanto recupera la data e ora dalla macchina dell' utente per cui non è affidabile.
Ogni utente potrebbe avere impostato un data diversa e invece noi vogliamo che a chiunque si colleghi ( che sia italiano o giapponese ) venga visualizzata l' ora e data in cui si trova il server.
Dunque, partiamo... Creo un FLA che salvo con nome ' orario_server.fla ', al cui interno ho un campo di testo dinamico che chiamerò format_txt.
Creola Document Class, un file AS che slavocon nome ' Orario.as ', implementata in questo modo:
Code:
package
{
import flash.display.MovieClip;
import flash.text.TextField;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.net.URLVariables;
import flash.net.navigateToURL;
import flash.utils.Timer;
import flash.events.*;
import flash.ui.ContextMenu;
import flash.ui.ContextMenuItem;
public class Orario extends MovieClip
{
private var days_array:Array;
private var months_array:Array;
private var serverTime:Number;
public function Orario()
{
init();
}
private function init():void
{
days_array=new Array('Domenica','Lunedi','Martedi','Mercoledi','Giovedi',
'Venerdi','Sabato');
months_array=new Array('Gennaio','Febbraio','Marzo','Aprile','Maggio',
'Giugno','Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre');
callServer();
}
private function callServer():void
{
var richiesta:URLRequest=new URLRequest();
richiesta.url='http://www.flepstudio.org/gettime.php';
var loader:URLLoader=new URLLoader();
addListeners(loader);
try
{
loader.load(richiesta);
}
catch (error:Error)
{
trace('Unable to load requested document.');
}
}
private function addListeners(d:IEventDispatcher):void
{
d.addEventListener(Event.COMPLETE,completato);
}
private function completato(e:Event):void
{
var loader:URLLoader=URLLoader(e.target);
var vars:URLVariables=new URLVariables(loader.data);
serverTime=vars.time;
initTime();
}
private function initTime():void
{
var server_milliseconds:Number=serverTime*1000;
var real_date:Date=new Date(server_milliseconds);
var hours:int=real_date.getHours();
var minutes:int=real_date.getMinutes();
var seconds:int=real_date.getSeconds();
var day_of_the_week:String=days_array[real_date.getDay()];
var day:int=real_date.getDate();
var month:String=months_array[real_date.getMonth()];
var year:int=real_date.getFullYear();
var hours_str:String=hours.toString();
if(hours<10)
hours_str='0'+hours.toString();
var minutes_str:String=minutes.toString();
if(minutes<10)
minutes_str='0'+minutes.toString();
var seconds_str:String=seconds.toString();
if(seconds<10)
seconds_str='0'+seconds.toString();
format_txt.text=hours_str+':'+minutes_str+':'+seconds_str+'\n'+
day_of_the_week+' '+day+' '+month+'\n'+year;
}
}
}
il risultato:
Analizziamo il codice:
Proprietà
due Arrays incui inserire i nomi dei giorni e mesi in italiano
private var days_array:Array;
private var months_array:Array;
una variabile numerica in cui inserirò il tempo universale in secondi che ricevo dallo script PHP
private var serverTime:Number;
Metodi:
init();
inizializzo gli Arrays
days_array=new Array('Domenica','Lunedi','Martedi','Mercoledi','G iovedi','Venerdi','Sabato');
months_array=new Array('Gennaio','Febbraio','Marzo','Aprile','Maggi o','Giugno','Luglio','Agosto','Settembre','Ottobre ','Novembre','Dicembre');
chiamo il metodo callServer;
callServer();
callServer();
faccio richiesta di un nuovo url istanziando la classe URLRequest
var richiesta:URLRequest=new URLRequest();
assegno alla proprietà url di URLRequest l' url del file PHP
richiesta.url='http://www.flepstudio.org/gettime.php';
istanzio la classe URLLoader
var loader:URLLoader=new URLLoader();
aggiungo i listeners necessari chiamando la funzione addListeners e chiamo lo script PHP
addListeners(loader);
try
{
loader.load(richiesta);
}
catch (error:Error)
{
trace('Unable to load requested document.');
}
addListeners();
aggiungo un listener in ascolto dell' evento COMPLETE, quindi quando il PHP avrà restituito il valore, sarà chiamata la funzione completato()
d.addEventListener(Event.COMPLETE,completato);
completato();
istanzio la classe Loader per recuperare chi ha dispacciato l' evento
var loader:URLLoader=URLLoader(e.target);
creo una variabile di tipo URLVariables per recuperare i valori restituiti dal PHP e assegno alla variabile serverTime tali valori
var vars:URLVariables=new URLVariables(loader.data);
serverTime=vars.time;
initTime();
creo una variabile in cui inserisco il valore dei secondi del server moltiplicati per 1000 in modo da ottenere i millisecondi
var server_milliseconds:Number=serverTime*1000;
creo un variabile di tipo Date a cui passo il valore dei millisecondi ( ecco perchè ho trasformato il valore a millisecondi di serverTime
var real_date:Date=new Date(server_milliseconds);
creo una variabile in cui inserisco il valore delle ore corrente utilizzando getHours di Date
var hours:int=real_date.getHours();
creo una variabile in cui inserisco il valore dei minuti correnti utilizzando getMinutes di Date
var minutes:int=real_date.getMinutes();
creo una variabile in cui inserisco il valore dei secondi correnti utilizzando getSeconds di Date
var seconds:int=real_date.getSeconds();
creo una variabile in cui inserisco il valore dell' Array days_array con indice pari al numero del giorno -1 ( perchè i giorni del mese partono da 1 ma gli Arrays in programmazione partono da zero )
var day_of_the_week:String=days_array[real_date.getDay()-1];
creo una variabile in cui inserisco la data del giorno odierno utilizzando getDate di Date
var day:int=real_date.getDate();
creo una variabile in cui inserisco il valore dell' Array months_array con indice pari al numero del mese
var month:String=months_array[real_date.getMonth()];
creo una variabile in cui inserisco il valore dell' anno corrente utilizzando getFullYear di Date
var year:int=real_date.getFullYear();
adesso devo controllare però se i valori delle ore, minuti e secondi sono minori di 10 in quanto se lo sono devo aggiungere uno zero altrimenti risulterebbe brutto vedere unformato ora di questo tipo: 9:7:8 invece di 09:07:08, quindi creo una variabile di tipo stringa per ogniuno di loro a cui assegno il rispettivo valore. Poi faccio il controllo e se il valore è minore di10 assegno uno zero prima del valore numerico ( il tutto concatenato a stringha )
var hours_str:String=hours.toString();
if(hours<10)
hours_str='0'+hours.toString();
var minutes_str:String=minutes.toString();
if(minutes<10)
minutes_str='0'+minutes.toString();
var seconds_str:String=seconds.toString();
if(seconds<10)
seconds_str='0'+seconds.toString();
infine posso adesso assegnare i valori al mio campo di testo sullo stage ( format_txt ) utilizzando un concatenamento tra stringhe e numeri
format_txt.text=hours_str+':'+minutes_str+':'+seco nds_str+'\n'+day_of_the_week+' '+day+' '+month+'\n'+year;