Komplizierteres RPG-Movement

  • GM 8
  • Komplizierteres RPG-Movement

    Servus Community,
    Ich bin das erste mal seit langen wieder aktiv und bei mir gehts in Sachen Gamemaker im momment einfach nicht mehr flüssig.
    Ich habe nämlich folgendes Problem : Ich möchte ein Movement auf RPG-Maker stil, jedoch ohne Grid. Soweit so gut, allerdings möchte ich nun noch, das wenn ich die Taste für Links gedrückt halte, er nach Links läuft, und zwar auch wenn ich anschließend nach Oben drücke. Halt bis ich die Erstgedrückte Taste loslasse.

    Hier nochmal mein Movement Script. :deal:
    Spoiler anzeigen

    Quellcode

    1. if keyboard_check(ord('A')) && !keyboard_check(ord('S')) && !keyboard_check(ord('D')) && !keyboard_check(ord('W'))
    2. {
    3. if place_free(self.x-global.curspeed,self.y)
    4. {
    5. curdir = 3
    6. idle = 0
    7. self.x -= global.curspeed
    8. }
    9. }
    10. if keyboard_check(ord('S')) && !keyboard_check(ord('A')) && !keyboard_check(ord('D')) && !keyboard_check(ord('W'))
    11. {
    12. if place_free(self.x,self.y+global.curspeed)
    13. {
    14. curdir = 2
    15. idle = 0
    16. self.y += global.curspeed
    17. }
    18. }
    19. if keyboard_check(ord('D')) && !keyboard_check(ord('S')) && !keyboard_check(ord('W')) && !keyboard_check(ord('A'))
    20. {
    21. if place_free(self.x+global.curspeed,self.y)
    22. {
    23. curdir = 1
    24. idle = 0
    25. self.x += global.curspeed
    26. }
    27. }
    28. if keyboard_check(ord('W')) && !keyboard_check(ord('S')) && !keyboard_check(ord('D')) && !keyboard_check(ord('A'))
    29. {
    30. if place_free(self.x,self.y-global.curspeed)
    31. {
    32. curdir = 0
    33. idle = 0
    34. self.y -= global.curspeed
    35. }
    36. }
    37. if keyboard_check_released(ord('W'))
    38. {
    39. curdir = 0
    40. idle = 1
    41. up = 0
    42. }
    43. if keyboard_check_released(ord('D'))
    44. {
    45. curdir = 1
    46. idle = 1
    47. right = 0
    48. }
    49. if keyboard_check_released(ord('S'))
    50. {
    51. curdir = 2
    52. idle = 1
    53. down = 0
    54. }
    55. if keyboard_check_released(ord('A'))
    56. {
    57. curdir = 3
    58. idle = 1
    59. left = 0
    60. }
    Alles anzeigen


    Ich hoffe ihr könnt euch ungefähr vorstellen was ich meine.. Lasst euch von left, right, up und down nicht verwirren, die sind einzig und allein für die Sprites :troll:

    LG Marvin159
  • Das Problem ist ganz eindeutig: Es liegt in der Abfrage:
    if keyboard_check(ord('A')) && !keyboard_check(ord('S')) && !keyboard_check(ord('D')) && !keyboard_check(ord('W'))
    Wenn du diesen Abschnitt mal betrachtest, sollte dir auffallen, dass er nur nach links geht, wenn weder S,D oder W gedrückt wird. Und beim nach oben laufen, genau das selbe, nur dass halt parallel zu W nicht S,D und A gedrückt sein darf.
    Mehr muss ich glaub ich nicht sagen^^
  • -$Marvin$- schrieb:

    Das Problem ist ganz eindeutig: Es liegt in der Abfrage:
    if keyboard_check(ord('A')) && !keyboard_check(ord('S')) && !keyboard_check(ord('D')) && !keyboard_check(ord('W'))
    Wenn du diesen Abschnitt mal betrachtest, sollte dir auffallen, dass er nur nach links geht, wenn weder S,D oder W gedrückt wird. Und beim nach oben laufen, genau das selbe, nur dass halt parallel zu W nicht S,D und A gedrückt sein darf.
    Mehr muss ich glaub ich nicht sagen^^

    ^^ stimmt :3 aber gibt es da nicht irgent eine Art das zu fixen :/ ?
    LG Marvin159
  • GML-Quellcode

    1. switch (keyboard_key)
    2. {
    3. case vk_up:
    4. y-=4;
    5. break;
    6. case vk_down:
    7. y+=4;
    8. break;
    9. case vk_right:
    10. x+=4;
    11. break;
    12. case vk_left:
    13. x-=4;
    14. break;
    15. }
    Alles anzeigen

    weis nicht ob das hilft aber bei diesem code kann er nur in eine richtung gleichzeitig laufen...
    also diagonal laufen geht hier nicht..

    Ich hoffe das ist was du suchst? MFG: Mar96K

    Edit: Musst es nur noch anpassen statt vk_up : ord('A') etc.
  • Benutzer online 1

    1 Besucher