Estoy usando Java / Slick 2D. Estoy tratando de usar el mouse para rotar el sprite y las teclas de flecha para mover el sprite. Puedo hacer que el sprite gire sin problemas, pero no puedo moverlo en la dirección que se supone que debe hacer. Cuando presiono "hacia adelante", el sprite no necesariamente se mueve hacia el mouse. En realidad, solo se moverá hacia la izquierda de la pantalla realmente. Estoy seguro de que tiene que haber algún código estándar para esto, ya que muchos juegos usan este estilo de movimiento. ¿Alguien puede ayudarme con lo que se supone que es el trigonometría? Gracias
EDITAR: Aquí está el código de rotación (que hace algo extraño: /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);
Y el código de movimiento. Solo puedo moverme hacia la izquierda de la pantalla ...
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;
}
Respuestas:
Querrás obtener un vector basado en tu velocidad y rumbo actuales. Luego usa ese vector para incrementar tu posición.
Así que ahora sabes tu velocidad en función de tu rotación. Puede actualizar su posición con esa información.
fuente
Obtienes la posición del mouse
Obtienes la posición del sprite
Tu encuentras el angulo
Tu movimiento será:
fuente