Principi di programmazione in Silverlight 1.0

4 pagine in totale: <<Indietro 1 2 [3] 4 Avanti >>

Gestione input da tastiera

L'oggetto Canvas principale, il Root, consente la gestione degli eventi di input da tastiera come KeyDown e KeyUp, anche questi eventi possono essere gestiti attraverso la dichiarazione direttamente nel codice XAML o programmaticamente allo stesso modo degli eventi del mouse:

KeyDown_TK = plugIn.content.Root.AddEventListener("KeyDown","onKeyDown");

La gestione combinata di questi eventi consente la creazione di effetti molto interessanti, come ad esempio lo spostamento di un oggetto alla pressione di un tasto:

function onKeyDown(sender, keyEventArgs)
{
    var _HelloTextBlock1 = sender.FindName("HelloTextBlock1");
    if(keyEventArgs.Key == 30)
    {
        _HelloTextBlock1.Text = "A";
        _HelloTextBlock1["Canvas.Left"]--;
    }
    if(keyEventArgs.Key == 33)
    {
        _HelloTextBlock1.Text = "D";
        _HelloTextBlock1["Canvas.Left"]++;
    }
}

Come è possibile leggere nel precedente esempio, i metodi gestori degli eventi KeyDown e KeyUp riportano due parametri sender e keyEventArgs, in modo del tutto analogo agli eventi del mouse essi corrispondono rispettivamente all'istanza dell'oggetto che ha scatenato l'evento ed all'oggetto contenente le informazioni dell'input avvenuto.

Attraverso la proprietà Key dell'oggetto keyEventArgs si ha accesso al codice corrispondente al tasto premuto, ogni codice identifica uno specifico tasto tra i caratteri standard supportati da tutti i sistemi operativi. È possibile accedere agli specifici tasti del sistema Windows e del sistema Mac OS X con la proprietà PlatformKeyCode.

L'oggetto Root consente anche il controllo del focus della scena con GetFocus e LostFocus, questi eventi risultano molto utili qualora sia necessario inattivare alcune animazioni, video e suoni al momento che l'utente cambi la propria finestra attiva.

Visualizza l'esempio 3

Eventi multimediali: MediaElement

Gli elementi multimediali come audio e video possono essere gestiti attraverso gli eventi esposti dall'oggetto MediaElement, con questo oggetto è possibile aggiungere effetti audio alla scena ed ai singoli elementi in modo molto semplice:

<MediaElement x:Name="BackgroudSound" Source="Amanda.wma" MediaEnded="BackgroudSoundEnd"/>

Con questo codice il file audio da riprodurre è impostato con la proprietà Source che accetta l'URL del sorgente, il percorso del file può riferirsi sia ad una risorsa locale che ad una remota specificando un indirizzo HTTP completo. Impostando un URL con protocollo MMS viene tentata la riproduzione in streaming.

È possibile impostare come sorgente una lista di contenuti multimediali specificando un file di tipo ASX strutturato, ad esempio, come segue:

<asx version='3.0'>
    <title>Playlist</title>
    <entry>
        <title>Primo brano</title>
        <ref href="Guitar.wma"/>
    </entry>
    <entry>
        <title>Secondo brano</title>
        <ref href="Amanda.wma"/>
    </entry>
</asx>

In questo modo i brani vengono eseguiti in sequenza.

Al termine della corretta inizializzazione del sorgente da riprodurre viene scatenato l'evento MediaOpened, al termine del caricamento della scena automaticamente ha inizio la riproduzione.

Qualora si verifichi un errore nella validazione o durante la riproduzione del sorgente viene scatenato l'evento MediaFailed con il quale è possibile gestire l'eccezione, dare un messaggio all'utente o ritentare la riproduzione.

Dopo l'evento MediaOpened è possibile controllare molte delle proprietà dell'oggetto multimediale:

  • Attributes: consente la consultazione delle informazioni dell'elemento della lista di media impostata con un file sorgente di tipo ASX in corso di riproduzione;
  • BufferingProgress: indica un valore da 0 a 1 corrispondente allo stato di caricamento del buffer, il valore 1 corrisponde al completo buffering del media;
  • DownloadProgress: indica un valore da 0 a 1 corrispondente allo stato di scaricamento del media, il valore 1 corrisponde ad un download completo;
  • Markers: consente l'accesso alla collezione TimelineMarkerCollection di segnaposti (TimelineMarker) nell'arco temporale del contenuto;
  • NaturalDuration: indica la durata originale del contenuto multimediale sorgente; attraverso la proprietà Seconds questo oggetto di tipo Duration restituisce il valore decimale dei secondi di durata;
  • NaturalVideoHeight: indica l'originale altezza di un video impostato come sorgente;
  • NaturalVideoWidth: indica l'originale larghezza di un video;
  • NaturalVideoHeight e NaturalVideoWidth sono proprietà importanti per ottimizzare le prestazioni della scena, modificare la grandezza di un video in riproduzione comporta un elevato uso di risorse da equilibrare con il resto delle animazioni, impostare la grandezza del video in base alle suddette proprietà consente la riduzione al minimo del consumo di risorse.

Attraverso l'evento MediaEnded, scatenato al termine della riproduzione, viene intercettata la fine del brano per iniziare nuovamente la riproduzione in un ciclo infinito:

function BackgroudSoundEnd(sender, mediaEventArgs)
{       
    sender.position = "00:00:00";
    sender.play();
}

Nel metodo il parametro sender corrisponde all'istanza dell'oggetto MediaElement ad esso associato, con  la proprietà position si può leggere ed impostare la posizione dalla quale riprodurre il brano, in questo caso è impostata a zero per re-iniziare la riproduzione dall'inizio con il metodo play(). Combinando gli eventi del mouse su un oggetto specifico è possibile creare un controllo sulla riproduzione del brano di sottofondo:

function Speaker_onMouseLeftButtonDown(sender, mouseEventArgs)
{
    if(_BackgroudSoundPlay)
    {
        BackgroudSound.pause();
        _BackgroudSoundPlay = false;
    }
    else
    {
        BackgroudSound.play();
        _BackgroudSoundPlay = true;
    }

La variabile di controllo _BackgroudSoundPlay registra lo stato del contenuto multimediale, questo consente di far eseguire ad un singolo elemento grafico sia l'azione di play() che quella di pause() .

È possibile preparare un oggetto MediaElement per creare un effetto sonoro da utilizzare, ad esempio, al momento del MouseEnter su gli elementi di un menu:

<MediaElement x:Name="ItemMenuMediaOver" Source="Guitar.wma" MediaEnded="ItemMenuMediaOverEnd" AutoPlay="false"/>

Con la proprietà AutoPlay impostata a false la riproduzione non ha inizio automaticamente dopo il caricamento e può iniziare a seguito di una azione; l'evento MediaEnded si occupa di riportare il cursore di riproduzione all'inizio del brano per consentire una successiva riproduzione dell'audio in seguito ad un altro evento.

function ItemMenuMediaOverEnd(sender, mediaEventArgs)
{       
    sender.position = "00:00:00";
}

L'oggetto MediaElement espone anche altri eventi indispensabili per controllare i vari stati del caricamento e della riproduzione del media:

  • BufferingProgressChanged: generato al momento della variazione del caricamento del buffer;
  • DownloadProgressChanged: generato durante il download del media;
  • CurrentStateChanged: generato alla variazione di stato della riproduzione;
  • MarkerReached: generato quando viene raggiunto un TimelineMarker.

Visualizza l'esempio 4

Tra le potenzialità di MediaElement risultano molto utili quelle per la gestione del volume e del bilanciamento dell'audio, con la proprietà Balance è possibile gestire la distribuzione del volume tra gli speaker destri e sinistri dell'utente impostando un valore decimale nell'intervallo -1 / 1; il valore -1 causa l'assenza del volume sullo speaker destro spostandolo tutto sul sinistro, viceversa per il valore 1.

La proprietà Volume imposta l'intensità dei suoni con una scala decimale da 0 a 100, corrispondente ad un valore percentuale dell'intensità totale ed originale dell'audio del media; impostando la proprietà IsMuted a True è possibile inibire istantaneamente l'audio.

Visualizza l'esempio 5

4 pagine in totale: <<Indietro 1 2 [3] 4 Avanti >>

Attenzione: Questo articolo contiene un allegato

Contenuti dell'articolo

Commenti
Dai un voto a questo articolo, ci aiuterà a migliorare il nostro sito (1 è il voto minimo, 5 il massimo).

Per procedere al rating dell'articolo devi essere autenticato.


TUTORIALS


IN EVIDENZA
MISC