Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
La classe GamePieceCollection dérive de la classe générique List et contient des méthodes permettant de gérer plus facilement plusieurs objets GamePiece.
Création du code
Le constructeur de la classe GamePieceCollection initialise le membre privé capturedIndex. Ce champ est utilisé pour identifier la pièce de jeu qui contrôle actuellement la capture de la souris.
#region PrivateMembersAndConstructor
private int capturedIndex;
public GamePieceCollection()
{
// No capture yet.
capturedIndex = -1;
}
#endregion
Les méthodes ProcessInertia et Draw simplifient le code requis dans les méthodes Game.Update (page éventuellement en anglais) et Game.Draw (page éventuellement en anglais) du jeu en énumérant toutes les pièces de jeu dans la collection et en appelant la méthode correspondante sur chaque objet GamePiece.
#region ProcessInertiaAndDraw
public void ProcessInertia()
{
foreach (GamePiece piece in this)
{
piece.ProcessInertia();
}
}
public void Draw()
{
foreach (GamePiece piece in this)
{
piece.Draw();
}
}
#endregion
La méthode UpdateFromMouse est également appelée pendant la mise à jour du jeu. Elle permet à une pièce de jeu de capturer la souris en vérifiant d'abord si la capture actuelle (le cas échéant) est encore utilisée. Dans ce cas, aucune autre pièce n'est autorisée à vérifier la capture.
Si aucune pièce n'a actuellement la capture, la méthode UpdateFromMouse énumère chaque pièce de jeu de la dernière à la première et vérifie si cette pièce signale une capture de la souris. Dans ce cas, cette pièce devient la pièce actuellement capturée, et aucun traitement supplémentaire n'est effectué. La méthode UpdateFromMouse vérifie d'abord le dernier élément dans la collection pour que, si deux pièces se chevauchent, la capture revienne à celle dont l'ordre de plan est le plus élevé. L'ordre de plan n'est ni explicite ni modifiable ; il dépend simplement de l'ordre dans lequel les pièces de jeu sont ajoutées à la collection.
#region UpdateFromMouse
public void UpdateFromMouse()
{
MouseState mouseState = Mouse.GetState();
// If there is a current capture and
// that piece still reports having the capture,
// then return. Another piece cannot have the capture now.
if (capturedIndex >= 0 &&
capturedIndex < Count
&& this[capturedIndex].UpdateFromMouse(mouseState))
{
return;
}
capturedIndex = -1;
// A higher numbered index gets first chance
// for a capture. It is "on top" of a lower numbered index.
for (int index = Count - 1; index >= 0; index--)
{
if (this[index].UpdateFromMouse(mouseState))
{
capturedIndex = index;
return;
}
}
}
#endregion
Voir aussi
Concepts
Utilisation de manipulations et de l'inertie dans une application XNA
Création de la classe GamePiece