[quote=erickzanardo][quote=Michel.Montenegro]Resolvido, na classe “MovimentSystem” adicionei um IF no final (“if (mouseClickX >= 0 && mouseClickY >= 0)”), que resolveu meu problema, como foi bem dio pelo Pejuge o metodo move, foi feito para movimentar Squares (quadrados de 32 para 32, fazendo “animação suave (Caminhar)”, só precisei detectar o sentido do movimento e informar).
@Override
protected void process(Entity e) {
int mouseClickX = Util.MOUSE_CLICK_POSITION_XY.x;
int mouseClickY = Util.MOUSE_CLICK_POSITION_XY.y;
if (container.getInput().isKeyDown(Input.KEY_LEFT)) {
move(e, Util.KEY_ARROW_LEFT);
} else if (container.getInput().isKeyDown(Input.KEY_RIGHT)) {
move(e, Util.KEY_ARROW_RIGHT);
} else if (container.getInput().isKeyDown(Input.KEY_UP)) {
move(e, Util.KEY_ARROW_UP);
} else if (container.getInput().isKeyDown(Input.KEY_DOWN)) {
move(e, Util.KEY_ARROW_DOWN);
} else if (container.getInput().isKeyDown(Input.KEY_ESCAPE)) {
this.hostConnect.send("quit/");
} else if (mouseClickX >= 0 && mouseClickY >= 0) {
Transform moviment = movimentMapper.get(e);
PathFinder pathFind = new PathFinder();
Path caminho;
try {
caminho = pathFind.updatePath(moviment.getTileX(),
moviment.getTileY(), mouseClickX / Util.TILE_SIZE,
mouseClickY / Util.TILE_SIZE);
if (caminho != null) {
for (int i = 0; i < caminho.getLength(); i++) {
int keyArrow = directionPath(moviment.getTileX(),
moviment.getTileY(), caminho.getStep(i).getX(),
caminho.getStep(i).getY());
move(e, keyArrow);
}
}
} catch (SlickException e1) {
e1.printStackTrace();
}
}
}
Meu proximo passo é suavizar o moviment dos outrosplayers que aqui estão na base do teleporte hehehe…[/quote]
Fala Michel,
Uma sugestão que eu iria te dar para descobrir qual é a direção que se está andando, é usar o vetor de velocidade, se o x estiver menor que zero, esquerda, maior que zero direita, se o y maior que 0 para baixo, menor que zero para cima, levando em consideraçao que o plano é baseado em top/left.
Acho que a vantagem de se fazer assim é que o próprio player sabe qual direção ele está, independente do caminho em si.
[]s[/quote]
Não entendi bem, de onde tiraste o valor zero para esta analise? Te lembra que o mesmo vale para o teclado, tem que se algo que se adapte aos dois tipos de movimento.
* Dica: Para movimento diagonal, só fazer assim:
- Adicionar um atributo estatico na classe Util
- No MovimentSystem, por um SE checando se tem duas teclas precionadas (E passar o atributo estatico correspondente no metodo “move”):
if (container.getInput().isKeyDown(Input.KEY_LEFT) && container.getInput().isKeyDown(Input.KEY_RIGHT)) {
move(e, Util.KEY_ARROW_DIAGON_<NOME>);
}
no metodo move e na Thread principalmente só tratar o movimento, passando tanto o valor do X como do Y que sofreram alteração ao mesmo tempo.
Como o sistema de colisão com objetos moveis como monstros ainda não esta feito, não etou usando movimentação em diagonal ( vou deixar isso para quando todo o resto esteja ok, alémdo que, eu não tenh sprites com animações em diagonal rsrsr…).