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:
il risultato: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; } } }
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;
Questo è lo script PHP che viene chiamato:
Alla prossima !PHP Code:<?php
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
echo "time=" . time();
?>
Bookmarks