Andiamo ora a scrivere la funzione setUpControls
, dove imposteremo i listener per agire su direzione e intensità della luce in base alla posizione dello slider e al click del mouse. La funzione è la seguente:
Listato 39. Modifichiamo la luce in base ai comandi
function setUpControls(){
// Controllo della direzione della luce
Mouse.addListener(this);
onMouseDown = function() {
if( _ymouse > 170 ) return;
var mouseX = _xmouse - 100;
var mouseY = _ymouse - 100;
z = 50;
var v = new Vector( mouseX, mouseY, z );
var norm = VectorMath.getNorm( v );
light.setDirection(-mouseX/norm, -mouseY/norm, z/norm);
cam.rotateY(0);
}
// Bottone per accendere / spegnere la luce
lightButton.onRelease = onOff;
// controllo dell'intensità della luce
lightText.text = lightSlider.value;
var lightCh:Object = new Object();
lightCh.onChange = setIntensity;
lightSlider.addListener(lightCh);
}
Abbiamo associato al click (onMouseDown
) le azioni per rilevare la posizione del mouse e creare un vettore, dove le coordinate x e y sono calcolate in base alla distanza tra il centro dello schermo e il puntatore del mouse, mentre il valore z è fisso. Poichè la funzione setDirection
richiede che i parametri siano normalizzati, sfruttiamo il comando getNorm()
, quindi dividiamo per tale valore le componenti x, y e z. Il comando cam.rotateY(0)
è utilizzato per forzare il ri-calcolo della scena, in modo da mostrare i cambiamenti in tempo reale.
Nel codice abbiamo inserito anche i richiami alla funzione onOff
, che semplicemente si occupa di accendere o spegnere la luce, con questo codice:
Listato 40. Accende e spegne la luce
function onOff(){
lightOn = ! lightOn;
lightButton.setLabel ( lightOn ? "Off" : "On" );
skin.setLightingEnable( lightOn );
}
E alla funzione setIntensity
, che imposta la forza della luce in base al valore dello slider, grazie alle seguenti azioni:
Listato 41. Imposta la forza della luce in base al valore dello slider
function setIntensity(){
lightText.text = lightSlider.value;
light.setPower( lightSlider.value );
cam.rotateY(0);
}
Questa funzione semplicemente sfrutta il comando setPower
di Sandy per impostare l'intensità della luce in base al valore dello slider, che è impostato per andare da 0 a 150. Ecco il risultato:
La luce applicata nel filmato, con i comandi per modificarla
Ovviamente è possibile applicare la luce anche nel caso in cui il cubo abbia una skin con un'immagine:
Listato 42. Applica la luce nel caso di cubo con skin
this.attachMovie("image","imageholder",this.getNextHighestDepth());
imageholder._alpha = 0; // hide image on the Stage
var texture:BitmapData = new BitmapData( imageholder._width, imageholder._height);
texture.draw( this.imageholder );
skin = new TextureSkin( texture );
Assegniamo al cubo una texture, e il risultato è questo:
La luce applicata ad un cubo con texture
"© Petit Publications 2006" - diritti riservati