Tôi đang sử dụng Java / Slick 2D. Tôi đang cố gắng sử dụng chuột để xoay sprite và các phím mũi tên để di chuyển sprite. Tôi có thể làm cho sprite xoay không có vấn đề, nhưng tôi không thể làm cho nó di chuyển theo hướng mà nó được cho là. Khi tôi nhấn "về phía trước", sprite không nhất thiết phải di chuyển về phía chuột. Trên thực tế, nó sẽ chỉ di chuyển về phía bên trái của màn hình thực sự. Tôi chắc chắn phải có một số mã tiêu chuẩn cho việc này vì nhiều trò chơi sử dụng phong cách chuyển động này. Bất cứ ai có thể giúp tôi với những gì được cho là trig? Cảm ơn
EDIT: Đây là mã xoay vòng (làm một cái gì đó khác lạ: /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);
Và mã di chuyển. Tôi chỉ có thể di chuyển về phía bên trái của màn hình ...
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;
}