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;
}
Odpowiedzi:
Będziesz chciał uzyskać wektor na podstawie bieżącej prędkości i kursu. Następnie użyj tego wektora, aby zwiększyć swoją pozycję.
Teraz znasz swoją prędkość na podstawie obrotu. Za pomocą tych informacji możesz zaktualizować swoją pozycję.
źródło
Dostajesz pozycję myszy
Otrzymasz pozycję duszka
Znajdziesz kąt
Twój ruch będzie:
źródło