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:
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.