Używam Java / Slick 2D. Próbuję użyć myszy, aby obrócić duszka i klawiszy strzałek, aby przenieść duszka. Mogę zmusić duszka do obracania się bez problemu, ale nie mogę zmusić go do ruchu w kierunku, w którym powinien. Kiedy nacisnę „naprzód”, duszek niekoniecznie przesuwa się w kierunku myszy. W rzeczywistości przesunie się naprawdę tylko w lewą stronę ekranu. Jestem pewien, że musi to być jakiś standardowy kod, ponieważ wiele gier używa tego stylu ruchu. Czy ktoś może mi pomóc z tym, co powinno być wyzwalaniem? Dzięki
EDYCJA: Oto kod rotacyjny (który robi coś jeszcze dziwnego: /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);
I kod ruchu. Mogę tylko przesunąć się w lewą stronę ekranu ...
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;
}