J'utilise Java / Slick 2D. J'essaie d'utiliser la souris pour faire tourner le sprite et les touches fléchées pour déplacer le sprite. Je peux faire tourner le sprite sans problème, mais je ne peux pas le faire bouger dans la direction où il est censé le faire. Lorsque je frappe "en avant", le sprite ne se déplace pas nécessairement vers la souris. En fait, il ne se déplacera vraiment que vers la gauche de l'écran. Je suis sûr qu'il doit y avoir un code standard pour cela, car de nombreux jeux utilisent ce style de mouvement. Quelqu'un peut-il m'aider avec ce que le trig est censé être? Merci
EDIT: Voici le code de rotation (qui fait autre chose de bizarre: /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);
Et le code du mouvement. Je ne peux que me déplacer vers la gauche de l'écran ...
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;
}
Réponses:
Vous voudrez obtenir un vecteur basé sur votre vitesse et votre cap actuels. Utilisez ensuite ce vecteur pour augmenter votre position.
Alors maintenant, vous connaissez votre vitesse en fonction de votre rotation. Vous pouvez mettre à jour votre position avec ces informations.
la source
Vous obtenez la position de la souris
Vous obtenez la position du sprite
Vous trouvez l'angle
Votre mouvement sera:
la source