- Un semplice player video in XNA -
 
COSA SERVE PER QUESTO TUTORIAL
Download | Chiedi sul FORUM | Glossario cognizioni basiche di C# e sul framework XNA
Come gestire la riproduzione di un video in XNA

DISEGNARE UN VIDEO
Come servirsi del namespace Microsoft.Xna.Framework.Media per riprodurre video.

In questo tutorial vedremo come realizzare un semplice player video con XNA, dotato di tasti Play/Resume e Stop. Principalmente ci serviremo delle classi VideoPlayer e Video all'interno di Microsoft.Xna.Framework.Media. In sostanza si tratta di caricare un video in formato WMV in un oggetto Video, avviare la riproduzione con VideoPlayer e nella funzione Draw utilizzare il metodo VideoPlayer.GetTexture per ottenere il frame corrente. Tutto il resto è solo un po' di logica per gestire i pulsanti (per la quale è disponibile una classe da ampliare e riutilizzabile).
Per prima cosa nella nostra classe Game (VideoPlayerGame) dichiariamo il VideoPlayer e il Video:


// Il riproduttore di video
Microsoft.Xna.Framework.Media.VideoPlayer player = new Microsoft.Xna.Framework.Media.VideoPlayer();
// Il video da riprodurre
Video testVideo;

In LoadContent carichiamo il video dal ContentManager e inizializziamo il rettangolo dove l'output grafico verrà disegnato su una porzione dello schermo:


protected override void LoadContent()
{
    // ...

    // Inizializziamo l'area di disegno su tutto le schermo eccetto i tre pulsanti
    videoRectangle = new Rectangle(0, 0, this.GraphicsDevice.Viewport.Width, 
        this.GraphicsDevice.Viewport.Height - 60);

    // Creiamo lo SpriteBatch e carichiamo il video
    spriteBatch = new SpriteBatch(GraphicsDevice);
    testVideo = this.Content.Load<Video>("video");

}

Per rendere il player un po' più interattivo facciamo in modo che quando si fa click destro nell'area di gioco la dimensione dell'area in cui viene disegnato il video cambia conseguentemente:


protected override void Update(GameTime gameTime)
{
    // ...

    // La pressione del tasto destro del mouse ridimensiona 
    // l'area di disegno
    MouseState mouseState = Mouse.GetState();
    if (mouseState.RightButton == ButtonState.Pressed)
        videoRectangle = new Rectangle(videoRectangle.X, videoRectangle.Y,
            mouseState.X, mouseState.Y);

    // ...
}

Quindi, nel metodo Draw disegniamo il video nel rettangolo stabilito:


protected override void Draw(GameTime gameTime)
{
    // ...

    // Se il video non è in stop
    if (player.State != MediaState.Stopped)
    {
        spriteBatch.Begin();
        // Disegnamo il frame corrente
        spriteBatch.Draw(player.GetTexture(), videoRectangle, Color.White);
        spriteBatch.End();
    }

    // ...
}

Semplicemente se il video è in pausa o in esecuzione chiamiamo il metodo SpriteBatch.Draw passandogli come parametro il risultato di VideoPlayer.GetTexture che restituisce il frame corrente in forma di Texture2D.
Avviare e interrompere la riproduzione è banale (in VideoPlayer sono disponibili i classici metodi Play, Pause, Resume e Stop) e rimandiamo al sorgente dell'esempio associato per ulteriori dettagli.

 

<< INDIETRO by VeNoM00