Estou usando Java / Slick 2D. Estou tentando usar o mouse para girar o sprite e as setas do teclado para mover o sprite. Posso fazer o sprite girar sem problemas, mas não consigo que ele se mova na direção que deveria. Quando eu clico "para a frente", o sprite não necessariamente se move em direção ao mouse. Na verdade, ele só se moverá realmente para a esquerda da tela. Tenho certeza de que deve haver algum código padrão para isso, pois muitos jogos usam esse estilo de movimento. Alguém pode me ajudar com o que o trigonométrico deve ser? obrigado
EDIT: Aqui está o código de rotação (que faz outra coisa estranha: /programming/12610320/why-is-my-image-rotating-off-center )
int mX = Mouse.getX();
int mY = HEIGHT - Mouse.getY();
int pX = sprite.x;
int pY = sprite.y;
int tempY, tempX;
double mAng, pAng = sprite.angle;
double angRotate=0;
if(mX!=pX){
mAng = Math.toDegrees(Math.atan2(mY - pY, mX - pX));
if(mAng==0 && mX<=pX)
mAng=180;
}
else{
if(mY>pY)
mAng=90;
else
mAng=270;
}
sprite.angle = mAng;
sprite.image.setRotation((float) mAng);
E o código de movimento. Só posso me mover para a esquerda da tela ...
double ang = sprite.angle;
Input input = gc.getInput();
if(input.isKeyDown(sprite.up)){
sprite.x += Math.cos(ang)*sprite.moveSpeed;
sprite.y += Math.sin(ang)*sprite.moveSpeed;
}if (input.isKeyDown(sprite.down)){
sprite.x += -1*Math.cos(ang*Math.PI/180)*sprite.moveSpeed;
sprite.y += -1*Math.sin(ang*Math.PI/180)*sprite.moveSpeed;
}if (input.isKeyDown(sprite.left)){
sprite.x -= Math.cos(ang*Math.PI/180)*sprite.moveSpeed;
sprite.y += Math.sin(ang*Math.PI/180)*sprite.moveSpeed;
}if (input.isKeyDown(sprite.right)){
sprite.x += Math.cos(ang*Math.PI/180)*sprite.moveSpeed;
sprite.y -= Math.sin(ang*Math.PI/180)*sprite.moveSpeed;
}