Services i XNA Framework, hur använder jag dem?
En rätt trevlig implementationsdetalj i XNA Framework är användningen och exponeringen av så kallade services. Det går ut på att implementera komponenter som i sin tur exponerar ett publikt interface (som naturligtvis också implementeras) och som andra komponenter sedan kan få tillgång till och använda dess funktionalitet. I korthet går det till på följande sätt, med exemplet för hur en 3D-kamera skulle kunna implementeras (och har gjorts i flera fall):
1. Skapa ett interface, förslagsvis enligt följande:
interface ICamera
{
Matrix ProjectionMatrix { get; }
Matrix ViewMatrix { get; }
}
2. Detta interface implementeras sedan av en kamera klass som också ärver från GameComponent
class MyCamera : GameComponent , ICamera
{
...
3. I konstruktorn till denna kameraklass registrerar du sedan kameran som en tjänst
public MyCamera(Game game) : base(game)
{
game.Services.AddService(typeof(ICamera), this);
}
4. Sedan kan du i någon annan komponent (eller annan klass som har tillgång till Game-instansen) helt enkelt ropa på den tjänst som implementerar kamera-interfacet
public override void Draw(GameTime gameTime)
{
ICamera fpsCamera = base.Game.Services.GetService(typeof(ICamera)) as ICamera;
Draw(fpsCamera.ViewMatrix, fpsCamera.ProjectionMatrix);
base.Draw(gameTime);
}
Ganska snyggt, eller hur?
Comments
Anonymous
November 07, 2008
PingBack from http://www.tmao.info/services-i-xna-framework-hur-anvander-jag-dem/Anonymous
December 01, 2008
Detta var ju klockrent! Nu ser jag definitivt möjligheterna med komponenter och services! :)