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