Der Sprite wechselt sich nicht!

  • GM 7

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

  • Der Sprite wechselt sich nicht!

    Hallo,
    In meinem "mini Game" gibt es da ein kleines problem.
    Wen ich Springe nimmt das obj_player den Sprite vom "jump" an aber wen er wieder auf'm boden ist, is der immer noch in der
    "Jump Phase"
    hier kann man sehen was ich meine:





    Bitte hilft mir ich hab da schon so ein Paar sachen versucht aber die wahren hilflos!
    ich weiß auch nicht welchen Code ich posten soll =(

    Ich Danke schonmal im Vorraus!

    MFG KaZuo

  • ok..
    etwas lang glaub ich

    GML-Quellcode

    1. Information about object: obj_player
    2. Sprite: spr_man_idle
    3. Solid: false
    4. Visible: true
    5. Depth: 0
    6. Persistent: false
    7. Parent: <no parent>
    8. Mask: spr_man_mask
    9. Create Event:
    10. execute code:
    11. if place_meeting(obj_block.x,obj_block.y,obj_player)
    12. {
    13. sprite_index = spr_man_idle;
    14. image_index = 0;
    15. image_speed = 1;
    16. }
    17. execute code:
    18. gravity = 0.5;
    19. Collision Event with object obj_block:
    20. set the vertical speed to 0
    21. move in direction 270 at most 1 till a contact with solid objects
    22. if expression place_free(x,y+1) is true
    23. execute code:
    24. if place_meeting(obj_block.x,obj_block.y,obj_player)
    25. {
    26. image_index = spr_man_idle;
    27. }
    28. Key Press Event for <Up> Key:
    29. set the vertical speed relative to -10
    30. set the sprite to spr_man_jump with subimage 0 and speed 1
    31. if expression place_free(x,y+1) is true
    32. if relative position (0,1) is not collision free for Only solid objects
    33. Key Press Event for <Right> Key:
    34. start moving in directions 000001000 with speed set to 3
    35. set the sprite to spr_man_run with subimage image_index and speed 0.3
    36. if expression place_free(x,y+1) is not true
    37. if position (4,0) is collision free for Only solid objects
    38. Key Press Event for Y-key Key:
    39. create instance of object obj_shoot at position (obj_player.x,obj_player.y)
    40. Key Release Event for <Right> Key:
    41. set the sprite to spr_man_idle with subimage 0 and speed 1
    42. start moving in directions 000010000 with speed set to 0
    Alles anzeigen


    richtig lang ^^

  • Dein Kollisionsevent ist n ziemlicher Salat. Diese beiden Bedingungen:
    if expression place_free(x,y+1) is true
    execute code:

    if place_meeting(obj_block.x,obj_block.y,obj_player)
    {
    image_index = spr_man_idle;
    }

    heben sich gegenseitig auf und sorgen damit dafür, dass das Ereignis nie eintritt. Man kann nicht gleichzeitig einen Block berühren und nicht berühren. :P


    Probier's mal mit folgendem Code im Step-Event:

    GML-Quellcode

    1. if place_meeting(x,y+1,obj_block) sprite_index = spr_man_idle;
    2. else sprite_index = spr_man_jump;


    Should do the job.
  • komisch is jetzt das er die "geh animation" nicht mehr abspielt
    vllt. noch ins Press right event:

    GML-Quellcode

    1. if place_meeting(x,y+1,obj_block) sprite_index = spr_man_idle;
    2. else sprite_index = spr_man_run;

    €dit:
    hab ins right press event das gepackt aber es funzt einfach nicht:

    GML-Quellcode

    1. sprite_index = spr_man_run;
    2. image_index = image_index;
    3. image_speed = 0.3;

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

  • Unter umständen könntest du abfragen ob der boden unter den füßen hat. wenn dass dann der fall ist soll er den sprite wieder ändern...

    also ungefaihr so...

    GML-Quellcode

    1. if !(place_free(x,y-4))
    2. {
    3. sprite_index=DeinSprite;
    4. }


    hab jetz nich gelesen was die anderen gepostet haben also sorry wenns schon erledigt is oder ich etwas wiederholt hab :S

    gruß gruen


  • habs ausprobiert und es kommt wieder und wieder und wieder... =(
    ( das problem im erstem post ) =( ...
    es muss ja mit dem event mit dem Block zutun haben eig.
    oder wie irrenhaus3 schon geschrieben hat einen code im event.
    Aber wen ich das, dann mache das wenn er gesprungen ist ganz normal danach steht
    dann kommt die Geh animation nicht !
    hab eig. alles nochmal im obj geschrieben und alles in GML übertragen ( bis auf eine kleine sache :S :(

    GML-Quellcode

    1. nformation about object: obj_player
    2. Sprite: spr_man_idle
    3. Solid: false
    4. Visible: true
    5. Depth: 0
    6. Persistent: true
    7. Parent: <no parent>
    8. Mask: spr_man_mask
    9. Step Event:
    10. execute code:
    11. gravity = 0.5;
    12. if !(place_free(x,y-4))
    13. {
    14. sprite_index=spr_man_idle;
    15. }
    16. Collision Event with object obj_block:
    17. execute code:
    18. move_contact_solid ( 270 , 4 )
    19. vspeed = 0
    20. if place_free(obj_block.x,obj_block.y)
    21. {
    22. sprite_index = spr_man_idle;
    23. }
    24. Keyboard Event for <Right> Key:
    25. execute code:
    26. hspeed = 4
    27. sprite_index=spr_man_run;
    28. image_speed=0.3;
    29. image_index = image_index;
    30. Key Press Event for <Up> Key:
    31. execute code:
    32. sprite_index = spr_man_jump;
    33. image_index = 0;
    34. image_speed = 1;
    35. vspeed = -10;
    36. if expression (place_free(x,y+1) is true
    37. Key Release Event for <Right> Key:
    38. execute code:
    39. hspeed = 0;
    40. sprite_index = spr_man_idle;
    Alles anzeigen

    ich verzweifle :(

  • An deiner Stelle würde ich noch einmal das gesamte Spritesystem erstetzen:

    GML-Quellcode

    1. step event:
    2. if !(place_meeting(x,y+1,obj_block)
    3. {sprite_index = sprite_man_jump}
    4. if (place_meeting(x,y+1,obj_block))
    5. {
    6. if (keyboard_check(vk_right))
    7. {x += 4;
    8. sprite_index = sprite_man_run;}
    9. else if !(keyboard_check(vk_right))
    10. {sprite_index = sprite_man_idle;}
    11. }
    Alles anzeigen


    Den Rest des Codes musst du selbstverständlich noch einfügen, aber die Sprites sollten jetzt korrekt angezeigt werden.
    Im Übrigen sollte es bei deiner Variante in Zeile 15 wohl eher

    GML-Quellcode

    1. if !(place_free(x,y+4))
    heißen.
  • Benutzer online 5

    5 Besucher