Interactions avec le joueur
CHAPITRE 4
77
type voulu entre parenthèses juste avant l’objet, vous pourrez accéder aux méthodes de
l’objet.
((IKeyboardService)this.Services.GetService(typeof(IKeyboardService)))
➥.IsKeyDown(Keys.Up)
Il est à présent possible de réécrire la méthode du début de ce chapitre.
protected override void Update(GameTime gameTime)
{
if (((IKeyboardService)this.Services.GetService(typeof(IKeyboardService)))
➥.IsKeyDown(Keys.Up))
sprite.Update(new Vector2(0, -1 * gameTime.ElapsedGameTime.Milliseconds *
➥speed));
if (((IKeyboardService)this.Services.GetService(typeof(IKeyboardService)))
➥.IsKeyDown(Keys.Down))
sprite.Update(new Vector2(0, 1 * gameTime.ElapsedGameTime.Milliseconds *
➥speed));
if (((IKeyboardService)this.Services.GetService(typeof(IKeyboardService)))
➥.IsKeyDown(Keys.Left))
sprite.Update(new Vector2(-1 * gameTime.ElapsedGameTime.Milliseconds *
➥speed, 0));
if (((IKeyboardService)this.Services.GetService(typeof(IKeyboardService)))
➥.IsKeyDown(Keys.Right))
sprite.Update(new Vector2(1 * gameTime.ElapsedGameTime.Milliseconds *
➥speed, 0));
base.Update(gameTime);
}
Enfin, notez qu’il n’est pas obligatoire d’écrire une interface pour un service. Il est possible
de procéder directement ainsi :
game.Services.AddService(typeof(KeyboardService), new KeyboardService());
Les méthodes génériques
Comme vous venez de le constater, récupérer un service pour l’utiliser peut être
ennuyeux à la longue. Vous allez maintenant apprendre à créer une classe qui vous en
simplifiera l’utilisation.
Le casting
Lorsqu’il est nécessaire de convertir une donnée dans un type différent de celui choisi par la conversion
automatique, il faut préciser de manière explicite le nouveau type : cette opération s’appelle le casting.
Attention, cela peut parfois être source d’une perte de données. Si vous convertissez, par exemple, un
nombre décimal de type float vers un int, vous perdrez la partie décimale du nombre.
=Labat FM.book Page 77 Vendredi, 19. juin 2009 4:01 16
CHAPITRE 4
77
type voulu entre parenthèses juste avant l’objet, vous pourrez accéder aux méthodes de
l’objet.
((IKeyboardService)this.Services.GetService(typeof(IKeyboardService)))
➥.IsKeyDown(Keys.Up)
Il est à présent possible de réécrire la méthode du début de ce chapitre.
protected override void Update(GameTime gameTime)
{
if (((IKeyboardService)this.Services.GetService(typeof(IKeyboardService)))
➥.IsKeyDown(Keys.Up))
sprite.Update(new Vector2(0, -1 * gameTime.ElapsedGameTime.Milliseconds *
➥speed));
if (((IKeyboardService)this.Services.GetService(typeof(IKeyboardService)))
➥.IsKeyDown(Keys.Down))
sprite.Update(new Vector2(0, 1 * gameTime.ElapsedGameTime.Milliseconds *
➥speed));
if (((IKeyboardService)this.Services.GetService(typeof(IKeyboardService)))
➥.IsKeyDown(Keys.Left))
sprite.Update(new Vector2(-1 * gameTime.ElapsedGameTime.Milliseconds *
➥speed, 0));
if (((IKeyboardService)this.Services.GetService(typeof(IKeyboardService)))
➥.IsKeyDown(Keys.Right))
sprite.Update(new Vector2(1 * gameTime.ElapsedGameTime.Milliseconds *
➥speed, 0));
base.Update(gameTime);
}
Enfin, notez qu’il n’est pas obligatoire d’écrire une interface pour un service. Il est possible
de procéder directement ainsi :
game.Services.AddService(typeof(KeyboardService), new KeyboardService());
Les méthodes génériques
Comme vous venez de le constater, récupérer un service pour l’utiliser peut être
ennuyeux à la longue. Vous allez maintenant apprendre à créer une classe qui vous en
simplifiera l’utilisation.
Le casting
Lorsqu’il est nécessaire de convertir une donnée dans un type différent de celui choisi par la conversion
automatique, il faut préciser de manière explicite le nouveau type : cette opération s’appelle le casting.
Attention, cela peut parfois être source d’une perte de données. Si vous convertissez, par exemple, un
nombre décimal de type float vers un int, vous perdrez la partie décimale du nombre.
=Labat FM.book Page 77 Vendredi, 19. juin 2009 4:01 16
