Saya menggunakan Java / Slick 2D. Saya mencoba menggunakan mouse untuk memutar sprite dan tombol panah untuk memindahkan sprite. Saya bisa membuat sprite berputar tanpa masalah, tapi saya tidak bisa membuatnya bergerak ke arah yang seharusnya. Ketika saya menekan "maju", sprite tidak selalu bergerak ke arah mouse. Sebenarnya, itu hanya akan bergerak ke kiri layar kok. Saya yakin harus ada beberapa kode standar untuk ini karena banyak permainan menggunakan gaya gerak ini. Adakah yang bisa membantu saya dengan apa yang seharusnya menjadi trigonometri? Terima kasih
EDIT: Ini adalah kode rotasi (yang melakukan sesuatu yang aneh: /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);
Dan kode pergerakannya. Saya hanya bisa bergerak ke kiri layar ...
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;
}
Jawaban:
Anda ingin mendapatkan vektor berdasarkan kecepatan dan tajuk Anda saat ini. Kemudian gunakan vektor itu untuk meningkatkan posisi Anda.
Jadi sekarang Anda tahu kecepatan Anda berdasarkan rotasi Anda. Anda dapat memperbarui posisi Anda dengan informasi itu.
sumber
Anda mendapatkan posisi mouse
Anda mendapatkan posisi sprite
Anda menemukan sudutnya
Gerakan Anda akan:
sumber