Problem bei player

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • danke

    und das hier stimmt???
    step event

    GML-Quellcode

    1. if keyboard_check(ord("E")) && (attacke=0)
    2. {
    3. if (global.lastpressed=="right")
    4. {
    5. attacke++
    6. image_speed=0.3;
    7. sprite_index=spr_player_attacke_right;
    8. }
    9. else
    10. {
    11. attacke++
    12. image_speed=0.3;
    13. sprite_index=spr_player_attacke_left;
    14. }
    15. attacke=0; //oder doch alarm[0]=0;
    16. }
    Alles anzeigen
  • du solltest es anders machen im bezig aufs else

    mach statdessen

    else if (global.lastpressed=="left")

    denn wenn du später mal up oder so mit drin hast wird er wo anders hinschießen weil das else alles andere bedeutet
  • Nur um zu klarifizieren, weil mich das grad beim lesen auch verwirrt hat:

    Wenn du statt:

    GML-Quellcode

    1. if (global.lastpressed=="right")
    2. {
    3. }
    4. else
    5. {
    6. }


    zwei ifs miteinander verknüpft hast:

    GML-Quellcode

    1. if (global.lastpressed=="right") && keyboard_check(bla)
    2. {
    3. }
    4. else
    5. {
    6. }


    dann kannst du dir dein else verhauen und musst vorsichtig sein.Und um deine Frage zu beantworten: Du stellst den Alarm nur ein wenn du auch angreifst und das sprite änderst.
    STEP EVENT

    GML-Quellcode

    1. if keyboard_check(ord("E")) && (attacke=0)
    2. {
    3. if (global.lastpressed=="right")
    4. {
    5. attacke++
    6. image_speed=0.3;
    7. sprite_index=spr_player_attacke_right;
    8. alarm[0] = room_speed*4;
    9. }
    10. else
    11. {
    12. attacke++
    13. image_speed=0.3;
    14. sprite_index=spr_player_attacke_left;
    15. alarm[0] = room_speed*4;
    16. }
    17. }
    Alles anzeigen

    und im ALARM EVENT

    GML-Quellcode

    1. attack = 0;
    2. sprite_index = spr_player; //zB
    3. image_speed = 0;//zB

    wird die attack wieder auf 0 gesetzt und der sprite index wieder auf das normale sprite geändert.

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
  • Anstatt Variable Attack zu benutzen kannst du auch einfach checken wo der Alarm grad ist
    if (alarm[0] < 0)
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe
  • danke für eure antworten aber es geht leider immer noch nicht...er macht genau das was es nicht soll....

    also es sollte wenn man auf den Button E drückt, einmal die Schwert/Schlag Animation ganz ausführen.

    jedoch macht es jetzt so,das er nur ganz kurz die animation zeigt und dann kann man mehrere sekunden nicht mehr drücken bis er wieder schlägt...wegen dem alarm.

    bitte wie gehört es richtig...

    obj_player create event

    GML-Quellcode

    1. attacke=0;


    obj_player step event

    GML-Quellcode

    1. [b][/b]if keyboard_check(ord("E")) && (attacke=0)
    2. {
    3. if (global.lastpressed=="right")
    4. {
    5. attacke++
    6. image_speed=0.3;
    7. sprite_index=spr_player_attack_right;
    8. alarm[0] = room_speed*3;
    9. }
    10. else
    11. {
    12. attacke++
    13. image_speed=0.3;
    14. sprite_index=spr_player_attack_left;
    15. alarm[0] = room_speed*3;
    16. }
    17. }
    Alles anzeigen



    alarm 0 Event in obj_player

    GML-Quellcode

    1. image_speed=0;
    2. attacke=0;
    3. sprite_index=spr_player_idle



    aber geht nicht.wie schon gesagt macht er genau das falsche.
  • Die Animation stoppt aber das Attacken sprite ist noch da?
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe

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

  • acidrain833 schrieb:

    kann mir dabei keiner helfen???? dann mach ich es wieder wie am anfang mit mehreren objekten und 3fachen codes.....das wäre blöd...

    Mein Code macht genau was du willst, du drückst "E" und er wechselt zum Attack Sprite, wenn der Alarm ausgelöst wird wechselt er wieder zum normalen Sprite. Falls er die Animation zu schnell oder nicht komplett ausführt dann muss du den Alarm anpassen oder irgendein anderes Codesegment setzt bei dir schon vorher das Sprite wieder um, aber dafür hast du ja die attack variable, zB keine Bewegungsanimation if attack == 1;

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
  • @Aku_Ryou


    hallo ja du hast recht dein code macht was er solll...ich hab jetzt ein komplett neues spiel gestartet um es zu testen.das problem war das mit der variable attacke.... die hab ich jetzt weggelassen und es geht...


    jedoch hab ich das problem das er manchmal nicht vom 1ten sprite anfängt sondern mittendrin...sodass die animation grottig aussieht...was würdest du machen...
  • so????

    GML-Quellcode

    1. if keyboard_check_pressed(ord("E"))
    2. {
    3. if (global.lastpressed=="right")
    4. {
    5. image_speed=0.5; //speed mit dem die animation abgespielt werden soll
    6. sprite_index=spr_player_attack_right; // sprite für die schwert attacke
    7. image_index=0;
    8. alarm[0] = 12; // ist eine gute zeit geht sich genau mit einen schlag aus
    9. }
    10. else
    11. {
    12. image_speed=0.5;
    13. sprite_index=spr_player_attack_left;
    14. image_index=0;
    15. alarm[0] = 12;
    16. }
    17. }
    Alles anzeigen



    oder im alarm event????

    hab beides probiert geht aber nicht.
  • Na dann muss das Problem wo anders liegem. ;) Starte das Spiel mal im Debug Modus und watche attack und sprite_index, etc, da kannst du dich step für step oder code zeile für codezeile durchklicken bis du auf den Fehler stößt, wo er anscheind die variable zu früh wieder umstellt.

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
  • komisch plötzlich gehts......................danke dir @Aku_Ryou



    eins noch: also ich will nicht das wenn der player gerade eine attacke ausführt das man währenddessen nocheinmal auf E (attacke) drücken kann und sie von neu startet.
    auf deutsch :) ich will nicht das man während einer attacke noch eine attacke starten kann..erst wenn die fertig ist..

    also ich dachte das reicht wenn ich das keyboard_check_pressed nehme aber das wars nicht......

    ich hoffe du verstehst was ich meine...


    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von acidrain833 ()

  • MIt dem Code wird die Attacke abgebrochen sobald du eine Bewegung ausführst, da brauchst du dann wieder die attack variable, damit du dich nur bewegen kannst wenn attack 0 ist. Alarm[0] setzt Attack auf 0.

    GML-Quellcode

    1. if attack == 0
    2. {
    3. //bewegung
    4. //und
    5. //angriff
    6. if keyboard(E)
    7. {
    8. alarm[0];
    9. attack = 1;
    10. sprite = spr_attack
    11. //etc
    12. }
    13. }
    14. //Collision und gravity bleibt außerhalb der attack abfrage
    Alles anzeigen


    EDIT: Ich hab ein bisserl lang gebraucht für ddie Antwort, es ist ja schon spät^^ -> aber mit dem obigen Code passiert genau das was du grad brauchst :)

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
  • oje ich schaffs nicht ganz versteh nicht was du mit bewegung usw bei attack==0 meinst.....


    GML-Quellcode

    1. if (attack == 0)
    2. {
    3. if (global.lastpressed=="right")
    4. {
    5. sprite_index=spr_player_idle_right;
    6. image_speed=0.3;
    7. }
    8. else
    9. {
    10. sprite_index=spr_player_idle_right;
    11. image_speed=0.3;
    12. }
    13. }
    14. if keyboard_check(global.key_interact)
    15. {
    16. if (global.lastpressed=="right")
    17. {
    18. alarm[0]=12;
    19. attack = 1;
    20. image_index=0;
    21. sprite_index = spr_player_attack_right;
    22. }
    23. else
    24. {
    25. alarm[0]=12;
    26. attack = 1;
    27. image_index=0;
    28. sprite_index = spr_player_attack_right;
    29. }
    30. }
    Alles anzeigen



    und ich konnte es auch nicht in einen block packen.....also ich hab im create event noch attack=0 gemacht und im alarm[0] event hab ich attack=0 usw.


    was meinst du mit bewegung und angriff im attack==0 ???
  • geh mal lieber schlafen ^^

    Also Aku meint: Wenn das Spiel läuft und man rumrennt oder so, führt man keine Attacke aus ( attack == 0), sprich Rumlaufen-Sprite-Animation und Bewegung deines Spieler ist möglich. Wenn du dann 'E' drückst, soll die Attacke ausgeführt werden und damit man sie nicht ineinander ausführen kann, wird attack auf 1 gestellt, bis der Alarm abgelaufen ist.

    Ansonsten zu deinem Code: Das erste else macht genau das selbe wie das if - Mit Absicht?? Ist doch sinnlos
    Und du hast auch nur diesen Teil in der if(attack ==0) Abfrage drin, dadurch wird die Doppeltausführung auch nicht verhindert oder?

    Hoffe dir hilft's was und ich hab keinen Müll geschrieben...
    GML lernen geht leicht :)
    1. http://www.gm-d.de/help/ (deutsch)
    2. gm-d.de/wbb/index.php/Thread/2270/ (Einsteiger-Referenz)
    3. docs.yoyogames.com/ (Hilfe auf Englisch von GM:S)
  • also ich hab jetzt ein neues projekt gestartet um es zu testen und zu sehn ob es wirklich ein anderer code ist der stört..

    also ich hab ein obj_player gemacht mit diesen codes:

    Create Event
    Obj_Player

    GML-Quellcode

    1. attack=0; //zur kontrolle für die schlaganimation
    2. global.lastpressed=""; //zur kontrolle wo der player als letztes hinsieht
    3. image_speed=0; //weiß glaub ich jeder..



    Step Event
    Obj_Player

    GML-Quellcode

    1. if (attack==0)
    2. {
    3. if (global.lastpressed=="right")
    4. {
    5. sprite_index=spr_player_run_right;
    6. }
    7. else
    8. {
    9. sprite_index=spr_player_run_left;
    10. }
    11. if keyboard_check_pressed(ord("E"))
    12. {
    13. if global.lastpressed=="right"
    14. {
    15. sprite_index=spr_player_attack_right;
    16. image_speed=0.6;
    17. image_index=0;
    18. alarm[0] = 15;
    19. attack=1;
    20. }
    21. else
    22. {
    23. sprite_index=spr_player_attack_left;
    24. image_speed=0.6;
    25. image_index=0;
    26. alarm[0] = 15;
    27. attack=1;
    28. }
    29. }
    30. }
    Alles anzeigen



    Alarm 0 Event
    Obj_Player

    GML-Quellcode

    1. if (global.lastpressed="right")
    2. {
    3. sprite_index=spr_player_idle_right;
    4. image_speed=0.3;
    5. }
    6. else
    7. {
    8. sprite_index=spr_player_idle_left;
    9. image_speed=0.3;
    10. }



    und dann natürlich noch collisions code,gravity und noch codes für das links und rechts bewegen...

    aber es funktioniert nicht.....