Я использую Java / Slick 2D. Я пытаюсь использовать мышь, чтобы вращать спрайт, и клавиши со стрелками, чтобы переместить спрайт. Я могу заставить спрайт вращаться без проблем, но я не могу заставить его двигаться в том направлении, в котором он должен. Когда я нажимаю «вперед», спрайт не обязательно движется к мышке. На самом деле, он будет двигаться только к левой части экрана. Я уверен, что для этого должен быть какой-то стандартный код, так как многие игры используют этот стиль движения. Кто-нибудь может мне помочь с тем, что триг должен быть? Спасибо
РЕДАКТИРОВАТЬ: Вот код поворота (который делает что-то еще странное: /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);
И код движения. Я могу двигаться только к левой стороне экрана ...
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;
}
Ответы:
Вы хотите получить вектор на основе вашей текущей скорости и курса. Затем используйте этот вектор, чтобы увеличить вашу позицию.
Итак, теперь вы знаете свою скорость на основе вашего вращения. Вы можете обновить свою позицию с этой информацией.
источник
Вы получаете положение мыши
Вы получаете позицию спрайта
Вы находите угол
Ваше движение будет:
источник