Ich benutze Java / Slick 2D. Ich versuche, das Sprite mit der Maus zu drehen und mit den Pfeiltasten das Sprite zu bewegen. Ich kann das Sprite problemlos zum Drehen bringen, aber ich kann es nicht dazu bringen, sich in die Richtung zu bewegen, in die es soll. Wenn ich "vorwärts" drücke, bewegt sich das Sprite nicht unbedingt in Richtung Maus. Eigentlich bewegt es sich wirklich nur nach links auf dem Bildschirm. Ich bin mir sicher, dass es dafür einen Standardcode geben muss, da viele Spiele diesen Bewegungsstil verwenden. Kann mir jemand helfen, was der Trigger sein soll? Vielen Dank
BEARBEITEN: Hier ist der Rotationscode (der etwas anderes Seltsames bewirkt: /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);
Und der Bewegungscode. Ich kann mich nur nach links bewegen ...
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;
}
Antworten:
Sie möchten einen Vektor erhalten, der auf Ihrer aktuellen Geschwindigkeit und Richtung basiert. Verwenden Sie dann diesen Vektor, um Ihre Position zu erhöhen.
Jetzt kennen Sie Ihre Geschwindigkeit anhand Ihrer Rotation. Sie können Ihre Position mit diesen Informationen aktualisieren.
quelle
Sie erhalten die Mausposition
Sie erhalten die Sprite-Position
Sie finden den Winkel
Ihre Bewegung wird sein:
quelle