Top down bewegen, komisch

  • GM 8
  • Top down bewegen, komisch

    Einen schönen Abend wünsch ich allen!

    Ich beschäftige mich zurzeit mit der Top-Down-Perspektive und habe nun ein, ich denke sehr einfaches Problem, das ich aber irgendwie nicht löse. So mein Problem ist, ich will meinen Player senkrecht bewegen lassen, wenn ich die Taste "E" bzw. "Q" drücke, aber nicht mit x+=4 bzw. mit x-=4.

    Zurzeit bewege ich den Spieler so:

    GML-Quellcode

    1. direction = point_direction(x,y, mouse_x,mouse_y);
    2. image_angle = direction;
    3. if !keyboard_check(ord("W"))
    4. {
    5. if speed > 0 {speed -= 2;} else {speed = 0;}
    6. }
    7. if keyboard_check(ord("W"))
    8. {
    9. if speed < 5 {speed += 1;} else {speed = 5;}
    10. }
    Alles anzeigen


    klappt alles wunderbar ohne Fehler, nur wie gesagt mit E bzw. Q sollte er sich senkrecht bewegen.
    Gibt es eine Art Befehl, move_direction(direction-45, 2) oder so?

    Und noch etwas, ich will das sich der Speed dann auch überlagert, also man rennt gerade aus, dann drückt man E bzw. Q und dann rennt man halt im rechten Winkel zur Maus nach rechts bzw. links.
    Dieses Thema ist schwer zu erklären und gab es auch schon mal, nur wurde es nicht gelöst und dieses Thema ist 414 Tage alt und es stand ich sollte besser ein neuen Thread eröffnen.

    MfG Rodrog
    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Ergo: Je mehr Käse, desto weniger Käse.
  • Müsste doch eigentlich so funktionieren:

    GML-Quellcode

    1. if !keyboard_check(ord("W"))
    2. {
    3. if speed > 0 {speed -= 2;} else {speed = 0;}
    4. }
    5. if keyboard_check(ord("W"))
    6. {
    7. if speed < 5 {speed += 1;} else {speed = 5;}
    8. }
    9. if keyboard_check(ord("Q"))
    10. {
    11. direction = point_direction(x,y, mouse_x,mouse_y)+45;
    12. }
    13. else if keyboard_check(ord("E"))
    14. {
    15. direction = point_direction(x,y, mouse_x,mouse_y)-45;
    16. }
    17. else
    18. {
    19. direction = point_direction(x,y, mouse_x,mouse_y);
    20. }
    21. image_angle = direction;
    Alles anzeigen
    Einige meiner Spiele:
  • Ja das ist schon ungefähr so wie ich das mein.

    Nur ist es jetzt nicht so das ich mich 45* ruckartig nach rechts drehe??
    es sollte aber nach rechts gehen und nicht drehen, das heißt Seitwerts gehen.
    Schwer zu erklären.
    MfG Rodrog
    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Ergo: Je mehr Käse, desto weniger Käse.
  • Das würde mit ne kleinen Variable funktionieren:

    GML-Quellcode

    1. var dir;
    2. if !keyboard_check(ord("W"))
    3. {
    4. if speed > 0 {speed -= 2;} else {speed = 0;}
    5. }
    6. if keyboard_check(ord("W"))
    7. {
    8. if speed < 5 {speed += 1;} else {speed = 5;}
    9. }
    10. if keyboard_check(ord("Q"))
    11. {
    12. dir = direction+45;
    13. speed = 1
    14. }
    15. else if keyboard_check(ord("E"))
    16. {
    17. dir = direction-45;
    18. speed = 1
    19. }
    20. else
    21. {
    22. direction = point_direction(x,y, mouse_x,mouse_y);
    23. }
    24. image_angle = direction;
    Alles anzeigen
    :saint:
  • Wieso ??
    speed geht doch immer in die Richtung von direction, und bei dir passiert einfach nur das mein Spieler sich nach 1 weiterbewegt.
    Ich will seitwerts gehen.
    D.H.: Wenn der Spieler runter guckt, und ich E drücke sollte er sich nach rechts bewegen ABER gleichzeitig auch noch nach unten gucken
    Wenn der Spieler nach rechts guckt und ich E drücke sollte er sich nach rauf bewegen ABER gleichzeit auch noch nach rechts gucken.

    Ich hab jetzt schon alles durchprobiert. Und die Variable speed darf ich leider auch nicht verändern da sonst ich nicht gleichzeitig mich nach z.B.: rechts und runter bewegen kann. Ich bräuchte ungefähr etwas wie ein Extra Koordinatensystem das sich mit dem Spieler immer mitdreht und ich dann einfach x += 4 bzw. -= 4 machen kann
    Gibt es glaub ich nicht und deshalb muss ich das irgendwie lösen, hat den keiner eine idee?

    MfG rodrog
    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Ergo: Je mehr Käse, desto weniger Käse.
  • Oh stimmt , hab mich da vertan das könnte auch so funken:

    GML-Quellcode

    1. image_angle=point_direction(x,y,mouse_x,mouse_y);
    2. if keyboard_check(ord('W')) {direction=image_angle speed=2}
    3. if keyboard_check(ord('S')) {direction=image_angle speed=-2}
    4. if keyboard_check(ord('Q')) {direction=image_angle-45 speed=2}
    5. if keyboard_check(ord('E')) {direction=image_angle+45 speed=2}
    :saint:
  • Öhm das ist wieder das selbe. Der Spieler dreht sich dann in die Richtung, sollte er aber nicht xD
    Ich weiß nicht wie ich das noch erklären soll.
    Wenn jemand WoW kennt, das bestimmt einige kennen. Dann weiß man das man sich mit Q bzw. E seitwerts bewegen kann. So will ich das auch :)


    MfG Rodrog
    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Ergo: Je mehr Käse, desto weniger Käse.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Rodrog ()

  • Die Bewegung funktioniert also richtig, nur die Richtung, in die der Spieler schaut stimmt nicht?. Dann änder doch einfach die letzte Zeile in meinem Code:

    GML-Quellcode

    1. if !keyboard_check(ord("W"))
    2. {
    3. if speed > 0 {speed -= 2;} else {speed = 0;}
    4. }
    5. if keyboard_check(ord("W"))
    6. {
    7. if speed < 5 {speed += 1;} else {speed = 5;}
    8. }
    9. if keyboard_check(ord("Q"))
    10. {
    11. direction = point_direction(x,y, mouse_x,mouse_y)+45;
    12. }
    13. else if keyboard_check(ord("E"))
    14. {
    15. direction = point_direction(x,y, mouse_x,mouse_y)-45;
    16. }
    17. else
    18. {
    19. direction = point_direction(x,y, mouse_x,mouse_y);
    20. }
    21. image_angle = point_direction(x,y, mouse_x,mouse_y);
    Alles anzeigen
    Einige meiner Spiele:
  • Also ich glaub mich versteht hier keiner^^
    Denn die Direction darf nicht mit Q bzw. E geändert werden. es soll sich der Spieler nur nach rechts und links bewegen und das wenn möglich ohne speedveränderung, das es wahrscheinlich sonst Probleme mit dem Vorwärts gehen geben würde.
    Ich weiß nicht wie ich das noch genauer erklären sollte.

    MfG Rodrog
    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Ergo: Je mehr Käse, desto weniger Käse.
  • So also ^^

    Blauen Pfeile: Dort sollte er sich hin bewegen wenn man "Q" bzw. "E" drückt
    Schwarzer Pfeil: In diese Richtung sieht gerade der Spieler
    Roter Kreis: Spieler


    Erklärung: Der Spieler sollte sich im Rechtenwinkel zur Sichtrichtung bewegen, OHNE dabei speed oder direction zu verändern.


    MfG Rodrog


    EDIT: Ich hab es gelösst^^
    Dank Dick-Software-Studios (der ein Problem mit 3D-Kamera hat), er hat genau das wie ich es meine.

    GML-Quellcode

    1. {
    2. var xn,yn;
    3. xn = x + sin(direction*pi/180)*4;
    4. yn = y + cos(direction*pi/180)*4; { x = xn; y = yn; }
    5. }


    Trotzdem danke an alle.
    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Ergo: Je mehr Käse, desto weniger Käse.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Rodrog ()

  • Benutzer online 1

    1 Besucher