Creazione della classe GamePieceCollection

La classe GamePieceCollection deriva dalla classe List generica e introduce metodi per gestire più facilmente più oggetti GamePiece.

Creazione del codice

Il costruttore della classe GamePieceCollection inizializza il membro privato capturedIndex. Questo campo viene utilizzato per tenere traccia delle parti del gioco che dispongono attualmente dello stato mouse capture.

#region PrivateMembersAndConstructor
private int capturedIndex;

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

I metodi ProcessInertia e Draw semplificano il codice necessario nei metodi Game.Update (la pagina potrebbe essere in inglese) e Game.Draw (la pagina potrebbe essere in inglese) del gioco enumerando tutte le parti del gioco dell'insieme e chiamando il metodo corrispondente per ciascun oggetto GamePiece.

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

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

Il metodo UpdateFromMouse viene chiamato anche durante l'aggiornamento del gioco. Consente a una sola parte del gioco di disporre dello stato mouse capture verificando innanzi tutto se questo stato, se presente, è ancora attivo. In tal caso, a nessun'altra parte è consentito verificare lo stato mouse capture.

Se nessuna parte dispone attualmente dello stato mouse capture, il metodo UpdateFromMouse enumera ogni parte del gioco dall'ultima alla prima e verifica se quella parte segnala uno stato mouse capture. In tal caso, la parte diventa la parte attualmente dotata dello stato mouse capture e non si verifica nessun'altra elaborazione. Il metodo UpdateFromMouse controlla prima l'ultimo elemento dell'insieme in modo che se due parti sono sovrapposte, quella con l'ordine Z più elevato otterrà lo stato mouse capture. L'ordine Z non è esplicito né può essere modificato. Viene governato semplicemente dall'ordine nel quale le parti del gioco vengono aggiunte all'insieme.

#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

Vedere anche

Concetti

Utilizzo delle modifiche e dell'inerzia in un'applicazione XNA

Creazione della classe GamePiece

Creazione della classe Game1

Listati di codice completi

Altre risorse

Modifiche e inerzia