Como criar um Campo de Batalha?

4 respostas
java
Splayer

Galera, acabei de criar minha conta há 5 minutos atrás, então me desculpe se eu criei o tópico em lugar errado.

Estou tentando criar um jogo de cartas(exemplo: HeartStone, Clash of Royale, Yi-Gi-Oh, etc), eu quero fazer com que as cartas que estiverem em X lugar possam ser arrastadas para uma posição, caso seja solta sem encaixar por completo na posição, seja corrigido automaticamente…

Por favor me ajudem, faz mais de 8 meses que quero fazer só isso… xD

  • (Amador em Java e linguagem de programação)

Sendo mais simples, quero fazer com que quando pressionando com botao do mouse sobre uma carta seja possivel colocar numa area, caso nao seja colocada precisamente , por exemplo, faltando 2cm/56pixels, é automaticamente ajustado em cima da area

4 Respostas

D

Recomendo que vc use uma Engine de Game, existem vários, inclusive para java. Usar uma engine pode facilitar seu trabalho pois muito provavelmente já tem isso implementado.

No Java Swing tem implementado o Drag-n-drop (clicar e arrastar), mas é usado nos components swing e não é muito elegante, não sei quanto ao JavaFX, mas provavelmente também tem implementado.

Splayer

Nao tem como fazer só pelo NetBeans?
Pode citar alguma engine? (Já procurei varias e nenhuma me agradou )

D

Dá para fazer no netbeans

Esboço:

Posicao mouseInicial; // posicao inicial do mouse ao clicar
Posicao relativaAoObjeto; // posicao do mouse relativo ao objeto
Posicao objetoInicial; // posicao inicial do objeto ao clicar
Objeto selecionado;

void mousePressed(Event e) {
    // se não tem objeto em drag-n-drop
    if (selecionado == null) {
        // obtem objeto, pode ser de outra forma,
        // vai depender de como vc está fazendo
        selecionado = obterObjeto(e.atualPosicaoDoMouse);
        // se encontrou objeto
        if (selecionado != null) {
            mouseIniciao = e.atualPosicaoDoMouse;
            relativaAoObjeto = mouseIniciao - selecionado.atualPosicao;
            objetoInicial = selecionado.atualPosicao;
        }
    }
}

void mouseDragged(Event e) {
    // se não tem objeto em drag-n-drop
    if (selecionado == null) return; // nao faz nada
    // atualiza posicao
    selecionado.atualPosicao = e.atualPosicaoDoMouse - relativaAoObjeto;
}

void mouseDrop(Event e) {
    // se não tem objeto em drag-n-drop
    if (selecionado == null) return; // nao faz nada
    // avalia o drop, use e.atualPosicaoDoMouse ou selecionado.atualPosicao
    boolean dropOk = avaliarDrop(e.atualPosicaoDoMouse);
    if (dropOk) {
        // corrige a nova posicao
        corrigeAPosicao(selecionado);
    } else {
        // volta a posicao
        selecionado.atualPosicao = objetoInicial;
    }
    // libera o drag-n-drop
    selecionado = null;
}

Implemente num MouseListener e MouseMotionListener.

Se estiver usando components swing, o layout deve ser null ou um que não ajuste o component que está em drag, talvez o objeto pisque ou saia cortado quando movido.

Neste caso, poderá adaptar o seguinte tutorial neste link

Sobre engine, não conheço um q faça drag-n-drop pois não faço games que usam isso.

TerraSkilll

Que tipo de engine de agradaria? Alguma “estilo IDE” como o Netbeans, em que você só arrasta os elementos e programa muito pouco? Há poucos editores assim, mas dê uma olhada no Game Maker (https://www.yoyogames.com/gamemaker ).

Fazer um recurso de arrastar e soltar no Swing não é muito complicado, ainda mais se você usar Java2D. Veja um exemplo https://examples.javacodegeeks.com/desktop-java/awt/event/draw-and-drag-rectangles/ . Entretanto, não é algo que vem “pronto” no Netbeans. Você precisa programar.

Abraço.

Criado 15 de março de 2016
Ultima resposta 16 de mar. de 2016
Respostas 4
Participantes 3