Duvidas: MouseDragged e MouseMoved

7 respostas
J

Bom Dia… gostaria de ajuda para fazer os metodos mousedragged e mousemoved

Estou desenvolvendo um jogo de resta um, tenho o grafico pronto e as pecas todas adicionadas…

agora quero fazer com que as pecasse arrastem de um buraco para o outro…

alguem poderia me ajudar ?

tenho as pecas do resta um em um array list, cada peca tem um numro e uma letra. ex: a1, a2, b1, b2…

preciso muito da ajuda de vcs, obrigado

7 Respostas

G

Coloque um MouseAdapter e um MouseMotionAdapter no seu painel onde está o tabuleiro, implementado-os desta forma:

mouseMotionAdapter = new MouseMotionAdapter()
   @Override
   public void mouseMoved(MouseEvent e) {
   }

   @Override
   public void mouseDragged(MouseEvent e) {
   }
};

mouseAdapter = new MouseAdapter() {

   @Override
   public void mousePressed(MouseEvent e) {
   }

   @Override
   public void mouseReleased(MouseEvent e) {
   }
};

Mas ao invés disto, porque você não trabalha apenas com mousePressed e mouseReleased?

Capture um evento para o mousePressed. Com isto, você terá a posição do clique do mouse, e com o mouseReleased, a posição onde o botão foi solto.

Se mousePressed ocorreu em cima de uma peça, e mouseReleased em cima de uma "casa" vaga no tabuleiro, você saberá de onde até onde mover a peça.

J

VLW PELAS DICAS…

J

sabe alguma maneira de funcionar usando essa estrutura:

public void move(boolean casa){
    if (casa == true){

Public void mouseDragged(int x1 = 0,int mover = 0,int y1 = 0,int pecas = 0, MouseEvent e){


if(pecas == x1 ){

 x1.setText(String.format ("Dragged at [%d, %d]", mover.getx()) );
     }

else if (pecas == y1){
  y1.setText(String.format ("Dragged at [%d, %d]", mover.gety() ));
}
}
}

    else
Public void mouseMoved(int x1 = 0,int mover = 0,int y1 = 0,        int pecas = 0, MouseEvent e){
    
      if(pecas == x1 ){
  x1.setText(String.format ("Moved at [%d, %d]", mover.getx1()) );
     }  

else if (pecas == y1){
  y1.setText(String.format ("Moved at [%d, %d]", mover.gety1() ));  
    }
    
    
    }
}
G

Te pergunto se há necessidade de usar Drag.

Você precisa redesenhar a peça enquanto ela é movida, ou apenas quer usar o evento de Drag para saber de onde até onde movê-la?

Se você for ter que redesenhar a peça usando cada atualização do evento do mouse, vai ser medonho.

Se não precisar redesenhar a peça, poderia te dar uma dica usando o que falei acima com mousePressed e mouseReleased. Acho mais "econômico" =P

mouseAdapter = new MouseAdapter() {

            @Override
            public void mousePressed(MouseEvent e) {
                MouseEvent posicao = new MouseEvent(NOME_DA_SUA_CLASSE.this, e.getID(), e.getWhen(), e.getModifiers(), e.getX(), e.getY(), e.getClickCount(), e.isPopupTrigger());
                NOME_DA_SUA_CLASSE.this.inputRecorder.setMouseEvent(posicao);
            }

            @Override
            public void mouseReleased(MouseEvent e) {
                NOME_DA_SUA_CLASSE.this.inputRecorder.setMouseEvent(e);
            }
        };

Com estes eventos, você sabe onde o jogador clicou o botão do mouse e onde ele soltou.

Se mousePressed ocorreu em cima de uma peça e mouseRelease em cima de uma vaga no tabuleiro, valide qual peça foi selecionada e se ela pode ser movida, caso positivo, execute.

Outra maneira bem simples:

Ouça um evento completo de click (pressed e released), e desenhe um quadrado de seleção ao redor da peça clicada. Depois, aguarde o outro clique para ver onde o jogador clicou. Valide a posição final e atualize as peças no tabuleiro.

Caso você necessite usar drag e redesenhar, eu penso em algo diferente quando chegar em casa.

Abraço

J

Nao precisa redesenhar, pq eu fiz o tabuleiro com radiobutton

J

Onde eu coloquei o nome da classse deu erro, o erro dizia que a classe nao esta inclusa… mas o nome da classe ta certo ;/

G

No nome da classe use o this, também deve funcionar. Talvez a IDE “reclame” e peça para substituir pela referência da classe :wink:

Quanto a questão de não precisar redesenhar…

Se o seu tabuleiro é formado por diversos radioButton, apenas capture cliques.

Exemplo:

  • Clicar no radioButton A12 não faz desmarcar o radioButton (trate o evento do radioButton para isso)
  • Armazene qual radioButton foi clicado pelo mouse
  • Através disso, você sabe a localização da “peça”
  • Com essa localização, use o mapa de movimentação (você implementou algum?) para saber onde a peça na posição selecionada pode se mover
  • Verifique as casas que ela pode se mover olhando o mapa
  • Se nenhuma casa estiver liberada, avise o jogador
  • Se alguma casa estiver liberada, deixe selecionar
  • Valide onde o jogador clicar pela segunda vez para colocar a peça
  • Execute a jogada, removendo a peça “comida”

Com isso, nem precisa usar eventos de mouse personalizados.

Abraço

Criado 24 de junho de 2009
Ultima resposta 25 de jun. de 2009
Respostas 7
Participantes 2