Développement XNA pour la XBox et le PC
214
public Rectangle Rectangle
{
get
{
if (sourceRectangle == null)
return new Rectangle((int)position.X, (int)position.Y, texture.Width,
➥texture.Height);
else
return new Rectangle((int)position.X, (int)position.Y,
➥sourceRectangle.Value.Width, sourceRectangle.Value.Height);
}
}
Cette portion de code aurait aussi pu s’écrire de la manière suivante :
public Rectangle Rectangle
{
get { return new Rectangle((int)Position.X, (int)Position.Y,
(sourceRectangle == null) ? Texture.Width : sourceRectangle.Value.Width,
➥(sourceRectangle == null) ? Texture.Height : sourceRectangle.Value.Height);
}
}
Modifiez ensuite la méthode Update () de la classe ChapitreDix pour qu’elle effectue le
test entre les deux rectangles. Utilisez la méthode Intersects() d’un rectangle et passez
l’autre rectangle en argument.
Si les deux rectangles se superposent, le joueur a perdu : il faut réinitialiser sa position et
vider la liste des astéroïdes. La liste se vide via la méthode Clear (). Attention, si vous
supprimez un ou plusieurs éléments de la collection, vous devez sortir de la boucle qui
est en train de l’énumérer.
protected override void Update(GameTime gameTime)
{
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();
playerShip.Update(gameTime);
foreach (Asteroid asteroid in asteroids)
{
asteroid.Update(gameTime);
if (playerShip.Rectangle.Intersects(asteroid.Rectangle))
{
playerShip.ResetPosition();
Avancé Opérateur ternaire
L’exemple précédent utilise un élément du langage que vous n’avez encore jamais vu : l’opérateur ternaire.
Il permet de résumer des blocs if en une seule ligne. Sa syntaxe est la suivante :
(test) ? valeur si vrai : valeur si faux
=Labat FM.book Page 214 Vendredi, 19. juin 2009 4:01 16
214
public Rectangle Rectangle
{
get
{
if (sourceRectangle == null)
return new Rectangle((int)position.X, (int)position.Y, texture.Width,
➥texture.Height);
else
return new Rectangle((int)position.X, (int)position.Y,
➥sourceRectangle.Value.Width, sourceRectangle.Value.Height);
}
}
Cette portion de code aurait aussi pu s’écrire de la manière suivante :
public Rectangle Rectangle
{
get { return new Rectangle((int)Position.X, (int)Position.Y,
(sourceRectangle == null) ? Texture.Width : sourceRectangle.Value.Width,
➥(sourceRectangle == null) ? Texture.Height : sourceRectangle.Value.Height);
}
}
Modifiez ensuite la méthode Update () de la classe ChapitreDix pour qu’elle effectue le
test entre les deux rectangles. Utilisez la méthode Intersects() d’un rectangle et passez
l’autre rectangle en argument.
Si les deux rectangles se superposent, le joueur a perdu : il faut réinitialiser sa position et
vider la liste des astéroïdes. La liste se vide via la méthode Clear (). Attention, si vous
supprimez un ou plusieurs éléments de la collection, vous devez sortir de la boucle qui
est en train de l’énumérer.
protected override void Update(GameTime gameTime)
{
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();
playerShip.Update(gameTime);
foreach (Asteroid asteroid in asteroids)
{
asteroid.Update(gameTime);
if (playerShip.Rectangle.Intersects(asteroid.Rectangle))
{
playerShip.ResetPosition();
Avancé Opérateur ternaire
L’exemple précédent utilise un élément du langage que vous n’avez encore jamais vu : l’opérateur ternaire.
Il permet de résumer des blocs if en une seule ligne. Sa syntaxe est la suivante :
(test) ? valeur si vrai : valeur si faux
=Labat FM.book Page 214 Vendredi, 19. juin 2009 4:01 16
