Problem mit der Spielerbewegung im 3D-Java-Spiel

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Problem mit der Spielerbewegung im 3D-Java-Spiel

by Guest » 13 Jan 2025, 10:57

Ich arbeite derzeit an einem 3D-Java-Spiel. Ich möchte den Spieler bewegen lassen, indem er auf eine bestimmte Stelle im Gelände klickt. Es funktioniert gut, wenn der Spieler einmal klickt. Wenn der Spieler jedoch mehrmals klickt, beschleunigt der Charakter jedes Mal, wenn er klickt, bis er sein Ziel erreicht. Ich möchte verhindern, dass dies passiert, und wenn ein Spieler mehrmals klickt, möchte ich, dass die vorherige Bewegung abgebrochen und die neue ausgeführt wird.
Ich verwende einen Timer, wenn die Mit der Maus wird geklickt, weil es eine allmähliche Bewegung im Laufe der Zeit simuliert und es gut funktioniert, wenn man nur einen Klick nach dem anderen macht. Gibt es bessere Möglichkeiten, sanfte Bewegungen zu erreichen? (z. B. das Laufen zu einem bestimmten Punkt)
I Ich verwende X und Z, weil Y automatisch geschieht, da es die aktuelle Geländehöhe ist (Ich kann es bei Bedarf jederzeit ändern) Derzeit kann sich der Benutzer nur in eine positive Richtung bewegen, aber ich werde dies auch ändern. Das Problem ist nur die Beschleunigung.
Dies ist der Code unten. Ich weiß, dass er chaotisch ist, aber ich hoffe, dass es eine Lösung gibt.

Code: Select all

private void checkInputs(MousePicker picker){
if (Mouse.isButtonDown(0) && !picker.mouseButton0Clicked) {
currentSpeed = 40;
startX = getPosition().x;
startZ = getPosition().z;
targetX = picker.getCurrentTerrainPoint().x;
targetZ = picker.getCurrentTerrainPoint().z;
Timer timer = new Timer();
int begin = 0;
timer.schedule(new TimerTask() {
int counter = 0;
@Override
public void run() {
if(startX=targetZ){
timer.cancel();
}
currentSpeed = 0;
}
}, begin, (long) currentSpeed);
}
picker.mouseButton0Clicked = Mouse.isButtonDown(0);
}

Top