Compartir a través de


Crear la clase GamePieceCollection

La clase GamePieceCollection deriva de la clase List genérica e introduce métodos para administrar más fácilmente varios objetos GamePiece.

Crear el código

El constructor de la clase GamePieceCollection inicializa el miembro privado capturedIndex. Este campo se utiliza para realizar el seguimiento de cuál de las piezas de juego tiene actualmente la captura del mouse.

#region PrivateMembersAndConstructor
private int capturedIndex;

public GamePieceCollection()
{
    // No capture yet.
    capturedIndex = -1;
}
#endregion

Los métodos Draw y ProcessInertia simplifican el código que se necesita en los métodos Game.Draw y Game.Update del juego enumerando todas las piezas de juego en la colección y llamando al método respectivo en cada objeto GamePiece.

#region ProcessInertiaAndDraw
public void ProcessInertia()
{
    foreach (GamePiece piece in this)
    {
        piece.ProcessInertia();
    }
}

public void Draw()
{
    foreach (GamePiece piece in this)
    {
        piece.Draw();
    }
}
#endregion

También se llama al método UpdateFromMouse durante la actualización del juego. Permite que solo una pieza de juego tenga la captura del mouse comprobando primero si la captura actual (si hay alguna) se mantiene activa. En caso afirmativo, no se permite a ninguna otra pieza que busque la captura.

Si ninguna pieza tiene actualmente la captura, el método UpdateFromMouse enumera cada pieza de juego, de la última a la primera, y comprueba si esa pieza notifica una captura del mouse. En caso afirmativo, esa pieza se convierte en la pieza capturada actual y no se produce ningún procesamiento adicional. El método UpdateFromMouse comprueba el último elemento de la colección en primer lugar, de modo que si se superponen dos piezas, la que tenga un orden Z superior obtendrá la captura. El orden Z no es explícito ni modificable; se rige simplemente por el orden en que se agregan piezas de juego a la colección.

#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

Vea también

Conceptos

Usar manipulaciones e inercia en una aplicación XNA

Crear la clase GamePiece

Crear la clase Game1

Listas de código completas

Otros recursos

Manipulaciones e inercia