Kategorie
.net c# xna

XNA: Obsługa video

xnavideo

W niedawno zaprezentowanej wersji XNA 3.1, dodano obsługę plików video (.wmv). Na co może się to przydać? Od teraz, w prosty sposób, można np. wyświetlać filmy na dowolnym vertexie, w aplikacji, jako tekstura.

Jak ta nowa funkcjonalność sprawuje się w praktyce i jak się jej używa?

Kod

Przede wszystkim, niezbędne będzie importowanie przestrzeni media:

using Microsoft.Xna.Framework.Media;

…oraz stworzenie zmiennych, do których będziemy się odwoływać w obrębie klasy:

Video video;
VideoPlayer videoplayer = new VideoPlayer();

Dodajemy „existing item” do folderu Content, oraz przypisujemy film do zmiennej Video w metodzie LoadContent():

video = Content.Load<Video>("film");

…,a jako parametr metody Play, podajemy obiekt z naszym filmem:

videoplayer.Play(video);

Po uruchomieniu, film już działa, ale po za dźwiękiem, nie widać żadnych rezultatów. Wystarczy tutaj użyć metody .GetTexture(), klasy VideoPlayer, która zwróci teksturę, z aktualnie odtwarzaną klatką filmu. Teksturę można już użyć w dowolny sposób, czy to używając jej na mesh’u modelu, czy też jako sprite (w metodzie Draw):

Texture2D texture = videoplayer.GetTexture();

spriteBatch.Begin();
spriteBatch.Draw(texture, new Rectangle(0, 0, texture.Width, texture.Height), Color.White);
spriteBatch.End();

Rezultat

Efekt jest następujący:
vexample
Podmianę tekstury jednego z mesh’ów, zaprezentowałem na krótkim filmie:

Warto jeszcze wspomnieć o metodach .Stop() i .Resume() klasy VideoPlayer. Natomiast stan filmu jest przechowywany w zmiennej VideoPlayer.state.

Be Sociable, Share!