Frage zu Sprite verwendung

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

  • Frage zu Sprite verwendung

    hallo

    also ich mache ein spiel und ich habe jetzt die sprites bestimmt wie zb: das wenn der spieler nach links drückt das sprite spr_player_run_left benutzt wird und das selbe für rechts und fürs stehen bleiben.


    jedoch hab ich das problem das ich nicht weiß wie ich es machen kann das er die sprites fürs springen benutzt....also wenn er nach rechts springt auch das spr_player_jump_right benutzt wird. und dasselbe für links.
    und wenn er nur springt soll er halt das sprite nehmen das in die selbe richtung schaut...


    hier mal mein code.

    im CREATE EVENT von OBJ_PLAYER ist nur eine variable namens lastpressed="right";



    END STEP EVENT VON OBJ_PLAYER

    GML-Quellcode

    1. hspeed=0;
    2. if keyboard_check(vk_left) or keyboard_check(ord("A")) ///nach links gehn
    3. {
    4. hspeed-=7;
    5. lastpressed="left";
    6. sprite_index=spr_player_run_left;
    7. image_speed=0.2;
    8. }
    9. if keyboard_check_released(vk_left) or keyboard_check_released(ord("A")) // wenn die linke taste ausgelassen wird
    10. {
    11. image_speed=0;
    12. sprite_index=spr_player_idle_left;
    13. }
    14. if keyboard_check(vk_right) or keyboard_check(ord("D")) //nach rechts gehn
    15. {
    16. hspeed+=7;
    17. lastpressed="right";
    18. sprite_index=spr_player_run_right;
    19. image_speed=0.2;
    20. }
    21. if keyboard_check_released(vk_right) or keyboard_check_released(ord("D")) //wenn die rechte taste ausgelassen wird
    22. {
    23. image_speed=0;
    24. sprite_index=spr_player_idle_right;
    25. }
    26. if keyboard_check_pressed(vk_up) or keyboard_check_pressed(ord("W")) ///springen
    27. {
    28. if place_free(x,y+10)== false
    29. vspeed-=14;
    30. }
    31. if place_free(x+hspeed,y) == false ////KOllisionserkennung links rechts
    32. {
    33. if (hspeed > 0){
    34. move_contact_solid(0,-1)} ///0 ist rechts 180 ist links
    35. if (hspeed < 0){
    36. move_contact_solid(180,-1)}
    37. hspeed=0;
    38. }
    39. vspeed+= 0.5;
    40. if place_free(x,y+vspeed) == false //// Kollisionserkennung oben unten
    41. {
    42. if (vspeed > 0){
    43. move_contact_solid(270,-1)} ///270 ist unten 90 ist oben
    44. if (vspeed < 0){
    45. move_contact_solid(90,-1)}
    46. vspeed=0;
    47. }
    48. if place_free(x+hspeed,y+vspeed) == false
    49. {
    50. hspeed=0;
    51. }
    52. if keyboard_check_released(vk_up) or keyboard_check_released(ord("W"))
    53. {
    54. if (vspeed < 0)
    55. vspeed /=2;
    56. }
    57. view_xview= ((x-view_wview/2)+view_xview*9)/10; //view
    58. view_yview= ((y-view_hview/2)+view_yview*9)/10;
    59. //view nicht aus dem raum geht
    60. if (view_xview <0)
    61. {
    62. view_xview=0;
    63. }
    64. if (view_yview <0)
    65. {
    66. view_yview=0;
    67. }
    68. if (view_xview > room_width-view_wview)
    69. {
    70. view_xview=room_width-view_wview;
    71. }
    72. if (view_yview > room_height-view_hview)
    73. {
    74. view_yview=room_height-view_hview;
    75. }
    Alles anzeigen




    bitte könnt ihr mir dabei helfen
  • Dann erstelle dir doch eine zb. "IsJumping"' Variable :)

    Einfach in dem Code Abschnitt wo das springen auslöst die Variable auf True setzen.
    Wenn der Spieler landet wieder zurück auf False.

    Dann kannst du herausfinden ob dein Spieler gerade springt oder eben nicht und dementsprechend die Animation ändern.
  • Dann musst du die Variablen zusammen verknüpfen mit "and".

    Beispielcode:

    GML-Quellcode

    1. if IsJumping = true and lastpressed = "right"
    2. {
    3. //Rechte Sprung Animation
    4. }
    5. if IsJumping = true and lastpressed = "left"
    6. {
    7. //Linke Sprung Animation
    8. }
    Alles anzeigen
  • danke aber wenn ich das so mache

    was muss ich dann bei dem code eingeben....wie erkennt er das er rechts hüpft oder links

    GML-Quellcode

    1. if keyboard_check_pressed(vk_up) or keyboard_check_pressed(ord("W")) ///springen
    2. {
    3. if place_free(x,y+10)== false
    4. vspeed-=14;
    5. }


    ich kann ja nicht einfach lastpressed="right " in diesem code schreiben weil er es ja dann nicht kapiert und es nichts nützt tut mir leid ich stell mich wahrscheinlich blöd an



  • Aller Anfang ist schwer. Ich war nur der Meinung, das du den Code selbst geschrieben hast. Scheint aber nicht der Fall zu sein? Ein Tutorial?

    Wenn ich Abends am PC bin kann ich dir das mal genau zeigen. Jetzt bin ich noch unterwegs, und mit Handy ist das etwas umständlich.
  • danke ja wäre toll...
    und ich hab den code teilweise geschrieben ausser die kollision und den view.was e fast alles ist :)

    hier mal ein test würde es so gehn:

    GML-Quellcode

    1. if keyboard_check_pressed(vk_up) or keyboard_check_pressed(ord("W")) ///springen
    2. {
    3. IsJumping ="true" and lastpressed="right"
    4. {
    5. if (hspeed >0) && (vspeed<0)
    6. sprite_index=spr_player_jump_right;
    7. ]else
    8. {
    9. if (hspeed<0)&&(vspeed<0)
    10. sprite_index=spr_player_jump_left;
    11. }
    12. }
    Alles anzeigen




    wahrscheinlich net oder....is wenigst ein kleiner ansatz dabei????
    bitte nicht schreien falls das einfach nur blödsinn ist da ich erst anfange
  • Hallo markus,
    ich denke ich habe die Lösung für dein Problem.
    Du musst lediglich eine variable namens lastpressed = "left im Create Event deines Objekts erstellen. Dies wird dazu benötigt um abzufragen ob du nach links oder rechts drückst.
    Diese Variable kannst du natürlich auch für deine Steuerung verwenden.

    //Animation
    if place_free(x,y+10)
    { //In der Luft
    if lastpressed == "right"
    sprite_index =spr_player_jump_right // Nach Rechts Schauen
    else
    sprite_index = spr_player_jump_left // Nach Links Schauen
    }
    else
    { //Am Boden
    if lastpressed == "right"
    sprite_index = spr_player_run_right // Nach Rechts Schauen
    else
    sprite_index = spr_player_run_left // Nach Links Schauen
    }

    Ich hoffe ich konnte dir bei deinem Problem helfen.
  • danke für deine antwort

    ich habe es probiert mit dem code und er funktioniert auch nur ein problem
    wenn man auf den tasten rechts und oben also nach rechts springen drückt und darauf bleibt passt es mit der animationn nicht wirklich.sie fängt immer neu an.was kann ich da machen..
    und wenn man nur einmal rechts und oben drückt passt es eigentlich.

    ich wollte es schon so probieren was auch einigermasen klappte aber nur einigermasen:

    GML-Quellcode

    1. if (direction < 0) && (vspeed < 0)
    2. sprite_index=spr_player_jump_right;




    das problem ist jetzt das er wenn ich den code zu meinem hinzufüge das jetzt das spr_player_idle_right usw ignoriert wird.
    also wenn man nach rechts rennt und den knopf nicht mehr drückt dann soll er dieses sprite verwenden.was auch ging bis ich den code von dir eingefügt habe.
    bitte um hilfe

    und noch was kann mir jemand diesen code erklären:
    if place_free(x+hspeed,y) ==false

    ich versteh nicht was das false dort zu bedeuten hat...was sagt das aus.es heißt ja wenn der platz frei ist um x achse + hspeed ,y es falsch ist???


    würde auch gerne mal sehn wie es ATOMICMASTER gelösst hätte um mehr ansporn zu haben und es besser zu verstehn.thx an alle

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

  • hi,
    also es gibt dafür verschiedene Varianten. Häufig verwendet mit einem !. Es gibt aber auch not und false.
    Codebeispiel:

    GML-Quellcode

    1. ​if !place_free(x+hspeed,y)
    2. if place_free(x+hspeed,y) ==false
    3. if not place_free(x+hspeed,y)


    Das ist eine verneinte Abfrage, also wenn das nicht geschieht. Das würde dann bei dem Code heißen, dass gefragt wird, ob der Platz nicht frei ist.
    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
  • ich habe eine frage und zwar ist mir aufgefallen das es manchmal probleme gibt wenn die anordnung des codes nicht passt.

    also gehn wir von meinem code ganz oben aus:
    wenn ich da zb den code
    if place_free(x+hspeed,y+vspeed)
    [
    hspeed=0
    }

    etwas nach oben verschiebe dann funktioniert er nicht mehr.
    aber wieso??

    es müsste doch egal sein welche reinfolge der code hat oder??
  • Poste mal den gesamten COde, wenn du es nach oben gezogen hast.
    Vllt ist es in einer anderen Schleife oder so gelandet..
    Aktuelles Projekt: Aufbau - Strategiespiel.
    Aktueller Entwicklungsschritt: Planung | Grundengine entwickeln.

    Wichtig ist nicht, besser zu sein als alle anderen.
    Wichtig ist, besser zu sein als du gestern warst.