vspeed nur einmal in 2 codes

  • vspeed nur einmal in 2 codes

    Hi,
    also ich hab einen Code:

    GML-Quellcode

    1. if keyboard_check(vk_shift)
    2. {
    3. if hspeed >0
    4. {
    5. other.friction=1
    6. other.hspeed =+10
    7. other.vspeed =-7
    8. }
    9. }
    10. else
    11. {
    12. other.hspeed =+5
    13. }
    14. if keyboard_check(vk_shift)
    15. {
    16. if hspeed <0
    17. {
    18. other.friction=1
    19. other.hspeed =-10
    20. other.vspeed =-7
    21. }
    22. }
    23. else
    24. {
    25. other.hspeed =+5
    26. }
    27. if keyboard_check(ord('E'))
    28. {
    29. other.hspeed =0
    30. }
    Alles anzeigen

    Der ist für Player1.
    Ich hab den gleichen für Player 2 nur mit anderen Tasten abfragen..
    nur da wird das vspeed =-7#
    nicht beachtet!
    ich hab schon versucht es ander's zumachen aber es Klappt einfach nicht!!!
    Was hab ich falsch gemacht?Bei dem anderen Player funktioniert es ja.
  • Ich würde den Code eh so schreiben, deiner ist irgendwie viel zu umständlich:

    GML-Quellcode

    1. if keyboard_check(vk_shift)
    2. {
    3. if hspeed >0
    4. {
    5. other.friction =1;
    6. other.hspeed =10;
    7. other.vspeed =-7;
    8. }
    9. else if hspeed<0
    10. {
    11. other.friction =1;
    12. other.hspeed =-10;
    13. other.vspeed =-7;
    14. }
    15. }
    16. else
    17. {
    18. other.hspeed =5;
    19. }
    20. if keyboard_check(ord('E'))
    21. {
    22. other.hspeed =0;
    23. }
    Alles anzeigen


    Was mich noch gewundert hat ist, das du =+ schreibst. Willst du mit =+5 einfach nur den Wert 5 zuweisen (das wäre =5) oder 5 addieren (was +=5 wäre)?
    "Die Erde ist ein Irrenhaus. Dabei könnte das bis heute erreichte Wissen der Menschheit aus ihr ein Paradies machen. Dafür müsste die weltweite Gesellschaft allerdings zur Vernunft kommen."
    - Joseph Weizenbaum
  • Wenn ich ihn richtig verstehe ist sein geposteter Code für den ersten Player und da funktioniert er auch. Nur beim zweitem Player funktioniert ein ähnlicher Code nicht.
    Wärs da nicht sinnvoller den Code zu posten, mit dem es auch Probleme gibt? ;)
  • Bei dem Code den du mir gegeben hast fliegt der ball aber immer nach recht's...
    Ich heng mal die Datei an...
    *********
    edit:@TrunX
    Es sind ja genau die gleichen ich hab in der Datei einmal WA's code benutzt..
    ich hab den einen aus dem ersten post ja nur in player 2 Kopiert und die Tastaturabfrage geändert

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

  • Ersetz die beiden
    hspeed abfragen mit:

    GML-Quellcode

    1. if(sprite_index == spr_p1r)
    2. {...}

    GML-Quellcode

    1. if(sprite_index == spr_p1l)
    2. {...}


    oder in deinem (falschen) Stil

    GML-Quellcode

    1. if sprite_index = spr_p1r
    2. {...}

    GML-Quellcode

    1. if sprite_index = spr_p1l
    2. {...}


    Also sollte der Code so aussehen (ich habe nur die Abfragen verbessert...)

    GML-Quellcode

    1. if keyboard_check(vk_numpad0)
    2. {
    3. if(sprite_index == spr_p1r)
    4. {
    5. other.friction =1;
    6. other.hspeed =10;
    7. other.vspeed =-7;
    8. }
    9. else if(sprite_index == spr_p1l)
    10. {
    11. other.friction =1;
    12. other.hspeed =-10;
    13. other.vspeed =-7;
    14. }
    15. }
    16. if keyboard_check(vk_numpad1)
    17. {
    18. other.hspeed =0;
    19. }
    Alles anzeigen


    €dit: Das Problem ist, dass du mit hspeed und net direction arbeitest, das wär viel leichter. Außerdem könntest du Sprites sparen, denn du brauchst nur eine Richtung und kannst sie mit image_xscale = -1 drehen...

    €dit 2: Ein komplett gesäuberter Code sollte so aussehen (nach meinem Stil):
    Spoiler anzeigen

    GML-Quellcode

    1. if(keyboard_check(vk_numpad0))
    2. {
    3. if(sprite_index == spr_p1r)
    4. other.hspeed=10;
    5. else if(sprite_index == spr_p1l)
    6. other.hspeed=-10;
    7. other.friction=1;
    8. other.vspeed=-7;
    9. }
    10. if(keyboard_check(vk_numpad1))
    11. other.hspeed=0;
    Alles anzeigen


    Alles was nur eine Zeile nach der if Abfrage hat, braucht keine geschweiften Klammern, deswegen schreibe ich die nicht. Anfangs / am Ende der if Abfrage schreibe ich immer Klammern. Hinweis: Du brauchst other.friction=1; und other.vspeed=-7; nicht in zweimal schreiben ;)

    mfg Merko

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von Merko ()

  • DAnke das du dir soviel mühe machst aber ich will ja das wenn numpad gedrückt ist nur ein hoher tor schuss ausgeführt wird.
    ***********
    Edit:Ich geh kaputt habs grade auf den anderen p2 gemacht bei ihm geht der hoch schuss wieder aber p1 nicht

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

  • Logikproblem. Spieler 1 hat eine niedrigere ID als der Ball, Spieler 2 eine höhere.
    Der Ball hat ja dieses Kollisionsevent mit dem Boden, das vspeed auf 0 setzt. Tritt Spieler 1 den Ball, vspeed wird -7, dann wird es sofort wieder 0 weil der Ball den Boden ja berührt. Beim Spieler 2 kommt der Tritt Ablauftechnisch nach der Bodenberührung. Ich hab das ganze etwas modifiziert, damit es hinhaut.
    Dateien
    "Die Erde ist ein Irrenhaus. Dabei könnte das bis heute erreichte Wissen der Menschheit aus ihr ein Paradies machen. Dafür müsste die weltweite Gesellschaft allerdings zur Vernunft kommen."
    - Joseph Weizenbaum