sprite_index bestimmen

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

    • sprite_index bestimmen

      Hallo.

      Ich habe mal eine einfache Frage. Ich hoffe die Kategorie ist richtig, weil sich die frage nicht unbedingt auf ein bestimmtest Spiel bezieht bin ich mal hier her gekommen.

      Also, ich hab in einigen exsamples und tutorials gesehen das der aktuelle sprite_index meistens im draw-event definiert wird... ich mache das aber immer im step-event und dabei hab ich irgdnwie das gefühl das ist nicht unbedingt gut ist.
      Die allgemeine Frage ist ob es da einen unterschied gibt wenn ich das im step-event oder im draw-event mache.
      also hier die frage: gibts da einen unterschied?

      (ich hab mir schonmal gedanken gemacht obs vielleicht einfach nur der ordnunghalber so war oder obs zum flüssigen ablauf des spiels beiträgt)

      das wars auch schon...
      Noch 2 mal duschen dann ist Wacken(2012) !
    • Meinst du, dass der sprite_index im Draw Event gesetzt wird?
      Also zB so ( im Draw Event ):

      GML-Quellcode

      1. sprite_index = player;


      oder folgendes im Draw Event:

      GML-Quellcode

      1. draw_sprite(sprite_index,image_index,x,y);


      Ich glaube, da gibt es folgenden Unterschied:
      Nehmen wir an, du willst jetzt das Sprite 'player' im Draw Event zeichnen.
      Dann schreibst du:

      GML-Quellcode

      1. draw_sprite(player,0,x,y);


      So, nun wird aber nicht mit dem 'player' Sprite eine Kollision ( falls vorhanden ) ausgeloest, sondern mit dem Sprite, das bei 'sprite_index' festgelegt wurde.
      Also, nehmen wir an du hast folgendes im Draw Event stehen:

      GML-Quellcode

      1. sprite_index = player0;
      2. draw_sprite(player1,0,x,y);


      Dann wird die Kollision nicht mit dem gedrawten Sprite ausgeloest, sondern mit dem Sprite, das in 'sprite_index' festgelegt wurde. ;)
      fabse64 -> haiyyu

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

    • Der wesentliche Unterschied zwischen den beiden Möglichkeiten besteht einfach darin, dass das Step-Event vor dem Draw Event ausgeführt wird. Wenn du also sprite_index im Step änderst und direkt danach im selben Event die Kollision mit was anderem abfragst, wird die Kollision auf den neuen Sprite-Index bezogen. Wenn du das Sprite im Draw änderst wird die Kollision erst im nächsten Step auf das neue Sprite bezogen.
      Das ist aber eigentlich schon alles :P
    • danke! aber das wusst ich bereits.

      nein was ich meitne bezog sich auf sprite_index

      und obs an geschwindigkeit stielt (wenn dann wahrscheinlich wenig, kommt ja auf die anzahl der objekte/sprites an)
      wenn ich nun im stept event was mit : if keyboard_check...{x+= 3} stehen habe und gleichzeitig nochmal im draw event steht: if keyboard_check... {sprite_index = spr_player_run_right} (und dazu muss ja am kopf noch stehen: draw sprite(sprite index etc.) das könnte doch alles an geschwindigkeit rauben weil die keyboard_check frage zweimal gestellt wir z.b. und weil zweimal gesagt wird welches sprite er zu zeichnen hat.


      edit: @irrenhaus: achso an die reihenfolge da hab ich garnicht gedacht.. ok, viel helfen wirds wahrscheinlich nicht es sei denn solche sachen sind bei einem spiel wichtig aber das wars auch schon denk ich. ach keine ahnung ich verquassel mich irgendwie gerade

      danke auf jedenfall schönen tag noch
      Noch 2 mal duschen dann ist Wacken(2012) !
    • Gewöhn dir ab sprite_index für Kollsionen zu nutzen und nimm dafür mask_index.

      Ansonsten schau dir mal in der Help "Order of Events" an - wenn du zusätzlich noch ein bischen rumspielst kannst du auch herausfinden, zwischen welchen Events der GM überhaupt seine "Drahtzieher"-Aufgaben macht. Ich bin mir nicht mehr so ganz sicher, aber die key statūs werden nur einmal pro Step aktualisiert und behalten bis zum nächstens Step Event ihren Wert bei.

      So wie ich dich verstanden habe, willst du, dass der Spieler sieht was gerade passiert und nicht erst einen Frame später. Dafür gibt es das Endstep Event - irgendwas im draw event zu machen ist riskant da a) der Sprite dann nicht mehr automatisch gezeichnet wird und b) die Reihenfolge der Draw-Events von der Depth abhängt.

      Um das Verständnis des Draw Events etwas zu verdeutlichen, versuche mal folgendes im Draw Event:
      Edit: Alten Code gelöscht, war ein Fehler drin

      Edit: Ändere mal die Depth im Draw Event bevor du im selbigen etwas zeichnest, setze diese aber im Stepevent immer auf den URpsungswert zurück und schau, ob der Sprite tatsächlich bei der Tiefe gezeichnet wird, die du im draw Event angibst oder oder bei der, die im Step Event steht.
    • Ich möchte jetzt nichts falschen sagen.
      Aber soweit ich weiß gibt es in erster Linie keinen Unterschied zwischen draw und Step.
      Natürlich ist klar, dass nur im Draw-Event gezeichnet werden kann.
      Aber sonst kann man auch alle Step-Funktionen im draw Event nutzen. Evtl. einige wenige nicht. Aber getestet habe ich das nicht. Ich selber stecke auch viele eigentliche Step Funktionen in den Draw-Event. Du kannst genaueres in der Helpfile vom Gamemaker einsehen. Einfach nach "step event" u/o "draw event" suchen.
      Begin Step und End Step dürfte eigentlich auch klar sein. Damit ist "step" eigentlich "middle step".
      Eigentlich kommte es eigentlich auch darauf an, in welcher Reihenfolge du Codes ausführen willst.
      Zum Beispiel:
      Wenn du die Variablen "zeit" und "altezeit" hast und beide nehmen ihre "Zeit" aus der Funktion current_time, musst du natürlich zuerst "altezeit=current_time" und dann "zeit=current_time" schreiben. Ist in erster Linie klar. Aber als ich mit dem GM angefangen habe, hatte ich das mal übersehen. Natürlich wars komplexer.
      Wichtig ist auch:
      Wenn dein Room_speed auf 30 gestellt ist und die fps flüssig laufen, das Step_Event und das draw_event 30 Mal in der Sekunde ausgeführt wird. For-Schleifen sind da schneller, weil sie unabhängig der "Raumgeschwindigkeit" arbeiten.
      Aber alles was unter der For-Schleife steht muss warten bis diese beendet ist. ... Oops, ich komm vom Thema ab. ^^
      57 6F 77 2C 20 64 61 73 20 68 61 73 74 20 64 75 20 67 61 6E 7A 20 61 6C 6C 65 69 6E 20 67 65 73 63 68 61 66 66 74 2E 20
    • Es gibt einige wichtige Unterschiede zwischen dem Draw- und Stepevent. Zum einen ist das Zeichnen auf Surfaces im Drawevent nicht möglichk, da es sonst zu seltsamen Effekten kommt. Zweitens muss man darauf achten, dass jedes Drawevent für jede View ein Mal ausgeführt wird. Bewegt man also eine Instanz mit dem Drawevent dann bewegt sie sich doppelt so schnell, wenn man zwei Views aktiviert hat. Darum sollte man Step- und Drawevent schön trennen; was mit Bewegen und Kollision zu tun hat kommt ins Stepevent und was mit Zeichnen zu tun hat ins Drawevent.

      mfg Dragoon
      int (*x(*x(int))[5])(int*);
      Confused? Yes, it's C!
    • Benutzer online 1

      1 Besucher