Schwertschlag - Frage zu Fixieren an Player plus Direction

  • GM 8

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

  • Schwertschlag - Frage zu Fixieren an Player plus Direction

    Hi,

    so meine spielfigur kann jetzt so ziemlich alles von hüpfen bishin zu jeglicher erdenklichen animation. Jetzt wollte ich dem noch relativ farblosem Helden ein Schwert verpassen. Hab mir hier auch etwas die anderen Beiträge durchgelesen aber anscheinend schnall ich das nicht ganz mit der Umsetzung.

    Ich habe obj_player mit dem code für die ganzen bewegungen etc und das obj_sword. Im obj_sword ist jetzt erstmal nur ein step event mit folgendem code..

    GML-Quellcode

    1. switch(direction){
    2. case 0: sprite_index = spr_sword; x = obj_player.x+45; y = obj_player.y+25; break;
    3. case 90: sprite_index = spr_sword; x = obj_player.x+145; y = obj_player.y+125; break;
    4. case 180: sprite_index = spr_sword; x = obj_player.x+245; y = obj_player.y+225; break;
    5. }


    Jetzt bin ich von der Logik ausgegangen bei case 0 sprich links laufen das er den sprite sword mit den koordinatenabstand zum spieler erstellt. Die anderen zwei werte für 90 und 180 sind frei ausgedacht da ich noch nicht soweit war das anzupassen.

    Wenn ich jetzt einen Testlauf starte hat er standardmäßig das schwert in der hand ok aber beim wechseln der direction wechselt sich nicht die koordinaten. (sprite_index = spr_sword war dafür gedacht das er bei anderen koordinaten einen anderen sprite verwendet)

    seh ich das jetzt ganz falsch ? :D
  • Nein das mit dem sprite ist ja erstmal nicht wichtig ...

    mir geht es um die koordinaten

    sprich wenn ich A drück dann dreht sich die figur ja nach links aber das schwert bleibt noch auf gleicher position

    es sollte aber wechseln

    sprich figur wird nach links bewegt und der sprite mit dem schwert ist von figur aus mit der koordinate x y entfernt das es auf der linken seite erscheint. wenn ich die figur nach rechts bewege soll der sprite mit dem schwert mit der koordinate x y rechts neber der figur erscheinen. und wenn ich nach oben drücke genau das gleiche mit einer anderen koordinate


    //edit 2

    Nochmal überarbeitet so dürfte das jetzt für jeden funktionieren der bei einem 2d game ein schwertschlag simulieren und wieder verstecken will ^^


    // Schwertschlag links aktiv

    if (mouse_check_button(mb_left)) and (keyboard_check(ord("A")))
    or (mouse_check_button(mb_left)) and (keyboard_lastkey=(ord("A")))
    {
    obj_sword_left.visible=true;
    sprite_index=spr_sword_left;
    x = obj_player.x-45;
    y = obj_player.y+25;
    }

    // Schwertschlag rechts aktiv

    if (mouse_check_button(mb_left)) and (keyboard_check(ord("D")))
    or (mouse_check_button(mb_left)) and (keyboard_lastkey=(ord("D")))
    {
    obj_sword_right.visible=true;
    sprite_index=spr_sword_right;
    x = obj_player.x+45;
    y = obj_player.y+25;
    }

    // Schwertschlag bei released verstecken

    if (mouse_check_button_released(mb_left))
    {
    obj_sword_right.visible=false;
    obj_sword_left.visible=false;
    }




    ok funktioniert nicht

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von Kraemer84 ()

  • GML-Quellcode

    1. //obj_sword
    2. x = obj_player.x + lengthdir_x(45,obj_player.direction+modifier);
    3. y = obj_player.y + lengthdir_y(45,obj_player.direction+modifier);


    ohne modifier steht das Schwert immer genau vor dem Player raus, mit dem modifier kannst den Winkel so anpassen, dass der Player es wieder in der Hand hat.

    Dann musst du nur noch den Schlag einbauen.
    Und falls du in 8 statt nur 4 Richtungen laufen möchtest funktioniert der Code immernoch.

    War dass das wonach du gesucht hast?

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

    ist ein 2d von daher nur links rechts und das mit dem sprung in verschiedene richtungen mach ich auch mit dem keyboard event. Hätte ich wahrscheinlich vorher dazu schreiben sollen ? ^^

    Also hab das jetzt doch ganz anderst gelöst weil der erste Lösungsansatz vielversprechend aussah aber in der Umsetzung nicht funktionierte.

    Ich hab jetzt folgendes was auch funktioniert..

    GML-Quellcode

    1. if (mouse_check_button(mb_left)) and (keyboard_check(ord("A")))
    2. or (mouse_check_button(mb_left)) and (keyboard_lastkey=(ord("A")))
    3. {
    4. obj_sword.visible=true;
    5. sprite_index=spr_sword;
    6. image_index=0;
    7. //image_index=1;
    8. //image_speed=0;
    9. x = obj_player.x-45;
    10. y = obj_player.y+25;
    11. }
    12. if (mouse_check_button(mb_left)) and (keyboard_check(ord("D")))
    13. or (mouse_check_button(mb_left)) and (keyboard_lastkey=(ord("D")))
    14. {
    15. obj_sword.visible=true;
    16. sprite_index=spr_sword;
    17. image_index=1;
    18. x = obj_player.x+45;
    19. y = obj_player.y+25;
    20. }
    21. else if (mouse_check_button_released(mb_left))
    22. {
    23. obj_sword.visible=false;
    24. }
    Alles anzeigen


    Jetzt kann man bestimmt schon am auskommentierten Teil erkennen das ich da versuch aus dem Image eine Animation zu machen. Ich kapier das aber nicht ganz mit dem image_speed etc

    Frage:

    Wenn ich jetzt sage mouse_check_button mb_left....etc

    zeige sprite schwert

    beginne animation image0

    zeige danach 1 --> 2 --> 3

    gehe zurück zu 0

    da muss ich das doch irgendwie mit dem image_speed einstellen ? hab das jetzt schonmal auf 1 gehabt, hab versucht alle indexe reinzuschreiben aber irgendwie erscheint beim klick nur das eine image

    will das nachher so einstellen das er bei links und klick image 0 - 3 zeigt und bei rechts und klick 4 - 7 ?( ?( ?(

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