sprite change, event prioritäten

  • sprite change, event prioritäten

    ja, ich weiss es gibt schon einen haufen an threats über sprite change auch bei den gelößten fragen aber ich konnte noch keine lösung für mein problem finden.
    zudem sei bemerkt, dass ich vom coden keine ahnung habe. ich hab halt spaß am pixeln und will einen simplen shmup nach meinen vorstellungen gestallten. also seht das als lernprojekt

    also wie gesagt ein simpler horizontal shooter und meine steuerung sieht wie folgt aus:

    alle vier richtungstasten mit "jump to position" mit der jeweiligen xy variablen mit dem wert 6.
    also keyboard event left
    jump to postion -6,0

    so weit alles klar, die kollisionsabfrage hab ich erstmal wieder rausgenommen. und eher unwichtige:
    bei create event: move towards a point 20, 250 speed1
    zu den sprites:

    ich habe insgesamt 4 sprites. einmal ohne antrieb, mit leichtem antrieb, und starker antrieb teilt sich auf in eine anfangs animation und eine restanimation, die dann geloopt werden soll. ich nenn die jetzt der übersichthalber sprite1, sprite2 usw... wobei sprite 2 der standart sprite ist womit er auch created wird. sprite 1 ist keine animation.

    also die steuerung sieht desweiteren so aus:

    keyboard event left
    change sprite: sprite1
    release left
    change sprite: sprite2
    press right
    change sprite: sprite3
    release right
    change sprite: sprite2
    press up
    change sprite: sprite3
    release up
    change sprite: sprite 2
    keyboard event down
    change sprite: sprite 1
    release down:
    change sprite. sprite 2

    hm.. wie kann ich denn drag and drop symbole im forum benutzen oO

    also mein probleme sind jetzt: wie mach ich es, dass wenn up oder right gedrückt werden sprite 3 einmal abgespielt und im anschluss sprite 4 solange die taste gedrückt bleibt geloppt wird.
    und viel wichtiger, wie erreiche ich, dass sprite 3 eine höhere prioriät hat als sprite 1? sprich wenn ich left und danach up drücke und beides gedrücckt halte, das trotzdem sprite 3 angezeigt wird. es scheint ja rigendwie zu sien, dass left und right höhere priorität genißen als up und down oder liegt das am keyboard?

    ah ja und eine sache noch.. kann man backgrounds oder objekte langsamer als speed 1 bewegen?

    danke schonmal

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von solseven ()

  • Herzlich Willkommen im Forum erstmal ;)

    Zu deiner Frage mit den D&D Icons: Hier ist ein Link, wo du die Icons per BBCode einbinden kannst. ;)

    Das Problem 1: Erstell dir ein Event: Other->Animation End ()
    Dort kannst du dir eine Variable erstellen, die speichert, ob Sprite 3 bereits einmal abgespielt wurde.
    Im Step Event fragst du diese Variable ab und reagierst darauf.

    Das Problem 2: Ich weiß nicht, wie du deinen Code momentan geschrieben hast (bzw. wie deine D&D Icons aussehen), aber ich würde es so machen, dass du abfragst, ob beide Tasten gedrückt werden und dann den Sprite 3 zeichnest, falls das zutrifft.

    Das Problem 3: Das geht leider nicht mit dem Room editor, da der keine Kommas, bzw. Punkte akzeptiert. Du kannst in den Room Creation Code (da wo man room_speed einstellt) folgendes schreiben:

    GML-Quellcode

    1. background_hspeed[0] = 0.5; //Beispielwert, kann auch kleiner bzw. größer sein


    mfg Critical
  • wow, danke für die schnelle antwort!
    der background funktioniert schonmal. schon komisch, eigentlich müsste es doch das selbe sein, ob man den wert eingibt oder in den code schreibt.

    so, warum schwer wenns auch einfach geht

    GML-Quellcode

    1. Keyboard Event for <Left> Key:
    2. move relative to position (-6,0)
    3. if relative position (-2,0) gives a collision with Only solid objects
    4. move relative to position (4,0)
    5. set the sprite to robot_r with subimage 0 and speed 1
    6. Keyboard Event for <Up> Key:
    7. move relative to position (0,-6)
    8. if relative position (0,-4) gives a collision with Only solid objects
    9. move relative to position (0,4)
    10. Keyboard Event for <Right> Key:
    11. move relative to position (6,0)
    12. if relative position (2,0) gives a collision with Only solid objects
    13. move relative to position (-4,0)
    14. Keyboard Event for <Down> Key:
    15. if relative position (0,1) is collision free for Only solid objects
    16. move relative to position (0,6)
    17. set the sprite to robot_r with subimage 0 and speed 1
    18. Keyboard Event for S-key Key:
    19. if expression Weapon=0 is true
    20. execute code:
    21. if (gunReady = 1) then
    22. {
    23. instance_create(x, y, bullet0);
    24. instance_create(x+11, y-2, mzl);
    25. gunReady = 0;
    26. alarm[0] = 2;
    27. }
    28. if expression Weapon=1 is true
    29. execute code:
    30. if (gunReady = 1) then
    31. {
    32. instance_create(x, y, triforcebullet);
    33. gunReady = 0;
    34. alarm[0] = 10;
    35. }
    36. Key Press Event for <Up> Key:
    37. set the sprite to antrieb1 with subimage and speed 1
    38. Key Press Event for <Right> Key:
    39. set the sprite to antrieb2 with subimage 0 and speed 1
    40. Key Release Event for <Left> Key:
    41. set the sprite to sprite35 with subimage 0 and speed 1
    42. Key Release Event for <Up> Key:
    43. set the sprite to sprite35 with subimage and speed 1
    44. Key Release Event for <Right> Key:
    45. set the sprite to sprite35 with subimage 0 and speed 1
    46. Key Release Event for <Down> Key:
    47. set the sprite to sprite35 with subimage 0 and speed 1
    48. //wie gesagt, da sind jetzt noch paar reste von wegen kollisionsabfrage, einfach nicht beachten, das ist noch von ner anderen steuerungsvariante mach ich später alles neu
    Alles anzeigen


    das sieht mehraussagender aus ^^

    wie kann ich abfragen ob beide tasten gedrück werden?¿

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von solseven ()