Compartilhar via


Criar a classe GamePieceCollection

O GamePieceCollection classe deriva da classe lista genérica e apresenta os métodos para gerenciar mais facilmente a vários GamePiece objetos.

Criação do código

O construtor da GamePieceCollection classe inicializa o membro privado capturedIndex. Este campo é usado para controlar o que as partes de jogo tem atualmente a captura do mouse.

#region PrivateMembersAndConstructor
private int capturedIndex;

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

O ProcessInertia e o Desenhar métodos simplificam o código necessário no jogo Game.Update e Game.Draw métodos de enumerar todas as partes do jogos na coleção e chamar o método respectivo em cada GamePiece objeto.

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

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

O UpdateFromMouse método também é chamado durante a atualização de jogo. Ele permite que apenas um pedaço de jogo para que o mouse para capturar, verificando primeiro para ver se a captura atual (se houver) ainda está em vigor. Nesse caso, nenhuma outra parte é permitido para verificar se há captura.

Se nenhuma informação tem, atualmente, a captura, o UpdateFromMouse método enumera cada pedaço de jogo do último ao primeiro e verifica se essa peça relata um mouse de captura. Nesse caso, essa peça torna-se a peça capturada atual e sem processamento adicional ocorre. O UpdateFromMouse método verifica o último item na coleção primeiro para que se as duas partes estão sobrepostos, aquele com a maior ordem z obterão a captura. Ordem-Z não é explícito nem alterável; ele é controlado simplesmente pela ordem na qual as partes do jogos são adicionadas à coleção.

#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

Consulte também

Conceitos

Usando as manipulações e inércia em um aplicativo XNA

Criar a classe GamePiece

Criar a classe Game1

Listagens de código completo

Outros recursos

Manipulações e inércia