Artigo
Implementando a funcionalidade Drag and Drop em jogos com XNA
Funcionalidade muito utilizada nos mais variados estilos de jogos
Enviado por Luciano José em 22/3/2008 12:21:39

 

O que é Drag-and-Drop?

 
Drag and Drop é arrastar e soltar. Essa funcionalidade é muito usada em aplicações Windows Forms.
 
Em jogos, não é diferente, existem muitos jogos que utilizam esse tipo de funcionalidade.
 
Observe o fluxo dessa funcionalidade aplicada em um jogo:
 
  1. Clica, geralmente, com o botão esquerdo do mouse em cima de um item, por exemplo;
  2. Pressiona o botão;
  3. Arrasta o item para o local desejado;
  4. Solta o item em algum local permitido; é muito comum esse local ser um inventário de um personagem.

Implementando Drag-and-Drop com XNA – Demonstração(Parte 1)

Em aplicações Windows Forms, essa funcionalidade é implementada principalmente baseada em Eventos. Você pode optar por não implementar essa funcionalidade utilizando Eventos, entretanto, o uso deles, facilita e deixa mais simples o processo de construção e manuseio dessa funcionalidade.

Demonstração

Essa funcionalidade será aplicada em um ambiente 2D(Sprites).
 
Será estabelecido um contrato para os Sprites que precisem ser arrastados(dragged) e/ou soltados(dropped).
 
Observe o contrato(Interface) que será estabelecido:
 
///
  Â/// Interface utilizada por objetos que tanto podem ser arrastados(dragged)
   /// ou soltados(dropped)
  Â///
  Âpublic interface IDragDrop
  Â{
      Â///
      Â/// Evento levantado no momento em que a operação Drag-and-Drop for iniciada.
      Â/// Evento levantado dentro do método DoDragDrop.
        ///
      Âevent EventHandler DragEnter;
      Â
      Â///
      Â/// Evento levantado quando o sprite, que está sendo arrastado
      Â/// pelo sprite condutor, for solto.
      Â///
      Âevent EventHandler DragDrop;
 
      Â///
      Â/// Propriedade utilizada pelos sprites que receberão os sprites arrastados.
      Â/// Esta propriedade encapsulará o campo allowDrop;
      Â/// Se esse campo for false, indica que o sprite(um inventário,
      Â/// por exemplo) que implementa esta interface,
      Â/// rejeita a tentativa de atribuição do sprite(Item) ao Inventário.
      Â/// Se o campo for true, o processo é permitido.
      Â///
      Âbool AllowDrop
        {
          Âget;
           set;
        }
      Â
      Âbool IsBeingDragged
        {
          Âget;
          Âset;
        }
 
      Â///
      Â/// Inicia o processo de Drag-and-Drop.
      Â/// Esse metodo será invocado quando o usuario clicar com o botão
      Â/// esquerdo do mouse.
      Â///
      Â///Sprite condutor responsavel por efetuar o processo de Drag-and-Drop
      Âvoid DoDragDrop(Sprite _sprite);
    }