Ciao.
Io posso anche commentare riga per riga ma spero tu abbia almeno qualche base di programmazione, almeno concettualmente.. altrimenti ci sarebbe bisogno più che altro di un corso accelerato.. Comunque sia dovresti iniziare a leggerti sulla guida il funzionamento dei vari comandi ActionScript, capiresti sicuramente meglio..
Ci sono dei concetti che anche per me viene difficile da spiegare. :master:
Comunque ci provo:
Codice PHP:
// valori iniziali
var f:Number = 1; // variabile utilizzata per stabilire la frequenza
var v:Number = 40; // variabile utilizzata per stabilire il voltaggio
var t:Number = 0; // variabile utilizzata come indice del tempo
freq.text = f; // imposto il valore sul campo freq
volt.text = v; // imposto il valore sul campo volt
// dimensioni grafico
var gw:Number = 450; // larghezza che deve avere l'area del grafico
var gh:Number = 200; // altezza che deve avere l'area del grafico
// posizione grafico
var gx:Number = 50; // posizione x dell'area del grafico, considerando come punto di registrazione il suo angolo superiore sinistro
var gy:Number = 100; // posizione y
// aggiornamento valori
var aggiorna = function () {// funzione richiamata quando premo invio o quando deseleziono un campo di testo
f = freq.text; // aggiorno la variabile f in base al valore del campo freq
v = volt.text; // aggiorno la variabile v in base al valore del campo volt
};
var key:Object = new Object(); // creo un oggetto key, per il listener
key.onKeyDown = function() { // assegno l'evento KeyDown all'oggetto key
if (Key.getCode() == 13) { // se l'ultimo tasto premuto è "invio"
aggiorna(); // esegui la funzione "aggiorna"
}
};
Key.addListener(key); // aggiungo il listener all'oggetto key
freq.onKillFocus = volt.onKillFocus=aggiorna; // la stessa funzione aggiorna vale per onKillFocus dei due campi (evento che si verifica quando si deseleziona un campo)
// creo contenitore per il grafico
_root.createEmptyMovieClip('grafico', 0); // creo un clip vuoto e lo istanzio con nome "grafico"
grafico.createEmptyMovieClip('monitor', 100); // al suo interno creo un ulteriore contenitore e lo istanzio come "monitor" (in questa istanza verrà disegnato il grafico)
with (grafico) { // all'interno del clip grafico
// creo un riquadro di sfondo
beginFill(0xeeeeee); // inizio il riempimento con colore grigio chiaro
lineStyle(0, 0xaaaaaa); // assegno uno stile per il tratto di contorno (spessore sottile, colore grigio medio)
moveTo(0, 0); // imposto il punto in cui inizio a disegnare il riquadro, alle coordinate x:0, y:0
lineTo(100, 0); // creo una linea fino alle coordinate x:100, y:0
lineTo(100, 100); // continuo la linea fino alle coordinate x:100, y:100
lineTo(0, 100); // continuo la linea fino alle coordinate x:0, y:100
lineTo(0, 0); // continuo la linea fino a chiuderla col punto iniziale
endFill(); // fine del riempimento del riquadro di sfondo
// creo una linea orizzontale al centro del riquadro di sfondo
moveTo(0, 50); // sposto il punto per riprendere a disegnare, alle coordinate x:0, y:50
lineTo(100, 50); // creo una linea fino alle coordinate x:100, y:50
_x = gx; // imposto la proprietà _x dell'istanza "grafico"
_y = gy; // imposto la proprietà _y dell'istanza "grafico"
_width = gw; // imposto la larghezza dell'istanza "grafico"
_height = gh; // imposto la lunghezza dell'istanza "grafico"
monitor._y = 50; // imposto la proprietà _y dell'istanza "monitor" in modo che la sinusoide venga poi disegnata al centro del riquadro
}
// reset del grafico
var reset = function () { // funzione richiamata una prima volta all'avvio del filmato (per inizializzare l'istanza "monior") e ogni volta che il tracciato, disegnato nel monitor, raggiunge la lunghezza massima.
with (grafico.monitor) { // all'interno dell'istanza "monitor"
clear(); // cancello il tracciato disegnato precedentemente (ovviamente la prima volta non ha nessun effetto perche non è ancora stato disegnato niente)
lineStyle(0, 0xff0000, 70); // riassegno lo stile linea per il nuovo tracciato da disegnare
moveTo(0, 0); // reimposto il punto di inizio del tracciato
}
};
reset(); // richiamo la funzione per inizializzare l'istanza "monitor"
// aggiorno il grafico
_root.onEnterFrame = function() { // utilizzo un evento enterFrame per creare, nel tempo, la tracciatura del grafico
var p:Number = Math.sin(t/100*(f*2)*Math.PI)*(v/2); // calcolo il punto p, cioè il valore ottenuto in funzione del tempo e della sinusoide sviluppata in base ai valori f e v
grafico.monitor.lineTo(t, p); // traccio (continuo) il segmento fino al nuovo punto x:t, y:p
t += .5;// incremento la variabile t, indicante lo scandire del tempo sul grafico (l'incremento è convenzionale e può non rispettare, come in questo caso, il tempo reale)
(t>(t %= 100)) && reset(); //.....e questa come te la spiego?
// quest'ultima riga ha diverse funzioni che sono espresse in modo contratto.
// è principalmente una condizione.. puoi notare la forma "(condizione) && (azione)".
// nella condizione utilizzo l'operatore modulo (%), per controllare se t è maggiore del suo valore "modulato".
// questo significa che se t arriva al valore 100, il suo valore modulato è 0, quindi la condizione è vera e viene richiamata la funzione reset.
// allo stesso tempo, alla variabile t, viene assegnato ogni volta il valore modulato. (t %= 100) si può anche scrivere (t = t%100)
};
Spero sia un po' più chiaro..
Buono studio