Sammlung von Tips

    • Sammlung von Tips

      Der Raum muß nicht größer sein als ein Bildschirm (bzw. der View). Objekte außerhalb des Raumes werden trotzdem normal behandelt. Man kann auch negative x- und y- Koordinaten verwenden.


      Im Room-Editor kann man Objekten mit STRG-Rechtsklick einen Code zuweisen (z.B. Startwerte für direction, speed etc.) Achtung: Instanz gelöscht - Code gelöscht.


      Objekte, denen kein Sprite (bei den Objekt-Eigenschaften) zugewiesen wurde, werden bei instance_deactivate ignoriert.


      Wenn man image_single anstatt image_index schreibt, wird der image_speed automatisch auf 0 gesetzt.


      Bei GML kann man viele Klammern etc. einfach weglassen - sie dienen "nur" der Übersichtlichkeit
      Spoiler anzeigen

      GML-Quellcode

      1. if (Anzahl=Viele)
      2. {
      3. script_execute(platzmachen,menge);
      4. }
      5. else
      6. {
      7. with Haus
      8. {
      9. with Bewohner { script_execute(breitmachen); }
      10. }
      11. }
      Alles anzeigen

      GML-Quellcode

      1. if Anzahl=Viele platzmachen(menge) else with Haus with Bewohner breitmachen()



      Anstatt true und false kann man auch 1 und 0 schreiben.


      Drehen und Skalieren von Grafiken kostet Rechenleitung, manche String-Funktionen leider auch (also Vorsicht bei draw_string)


      Wenn man ein Collision-Event mit einem "solid object" definiert (also selbst wenn nur ein Kommentar drin steht), wird jede Bewegung bei Kollision gestoppt.


      Wenn man ein Draw-Event definiert (selbst wenn nur ein Kommentar drin steht), wird das Sprite nicht gezeichnet.


      Wenn man irgendein Event definiert, wird das entsprechene Event des Parent-Objektes nicht ausgeführt, es sei denn man ruft es selber auf (mit event_inherited)


      Variablen, die man innerhalb eines Skriptes deklariert, stehen allen Objekten zur Verfügung
      Spoiler anzeigen

      GML-Quellcode

      1. var cx,cy;
      2. cx = (view.x > 2000) * 640;
      3. with wrapper
      4. {
      5. if (x < cx) x += 3360
      6. }

      Edit: Äh, darauf solltet Ihr Euch nicht verlassen



      Man kann Grafiken genauer als 1 Pixel plazieren, also Objekte auch langsamer als 1 bewegen. der Effekt wird aber erst bei der finalen Interpolation sichtbar (wenn aktiviert) und kann auch zu unerwünschten Entstellungen führen.


      Je höher das Tempo (Room-Speed), desto mehr ächzt die CPU - zum Beispiel wenn jeden Step duzende von KI-Skripten laufen. Deshalb ist es vielleicht besser, bestimmte Teile nur 1 bis 10 mal pro Sekunde aufzurufen (gemeint sind z.B. mp_grid_path oder mp_potential_path).


      mit "(360+Winkel) mod 360" kann man einfach sicherstellen, daß er im Bereich 0-360 bleibt.



      Diese Liste will gerne von Euch erweitert werden.

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

    • "Der Raum muß nicht größer sein als ein Bildschirm (bzw. der View). Objekte außerhalb des Raumes werden trotzdem normal behandelt. Man kann auch negative x- und y- Koordinaten verwenden."

      äh ja nur dass der raum halt leer ist und nicht im raumeditor gefüllt werden kann


      "Variablen, die man innerhalb eines Skriptes deklariert, stehen allen Objekten zur Verfügung"

      oha 8o
      das wusste ich nicht... danke!
    • "Drehen und Skalieren von Grafiken kostet Rechenleitung, manche String-Funktionen leider auch (also Vorsicht bei draw_string)"

      Das mit dem drehen und skalieren ist falsch.
      Nur vergrössern verlangsamt das Spiel wirklich, weil mehr Pixel gezeichnet werden müssen, alles andere beeinträchtigt die Performance nicht im Geringsten (ab gm6 natürlich).
      draw_string wird natürlich langsamer, je mehr Text gezeichnet werden soll.
    • Ab GM6 sollte das Drehen, Skalieren und Einfärben grafisch in der Graka abgewickelt werden. Es läuft ja über Direct3D. Im GM5 hat das wirklich übel gebremst, das war auch der Grund das auf D3D umzustellen.
      "Die Erde ist ein Irrenhaus. Dabei könnte das bis heute erreichte Wissen der Menschheit aus ihr ein Paradies machen. Dafür müsste die weltweite Gesellschaft allerdings zur Vernunft kommen."
      - Joseph Weizenbaum
    • Tip + Frage^^

      Kann man das eig umgehen das bei draw Events der sprite weg geht?...

      Hier einer von mir:

      man kann in einem script einfach das hier verwenden(FPS == 30):
      im Create:

      GML-Quellcode

      1. i=0

      Step:

      GML-Quellcode

      1. i = i+1
      2. if(i==10)
      3. {
      4. /*3 mal die sekunde auszuführender Code*/
      5. }


      das schont wie oben gesagt die Performance

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

    • "Objekte, denen kein Sprite (bei den Objekt-Eigenschaften) zugewiesen wurde, werden bei instance_deactivate ignoriert."
      Das ist ja auch mal krass 8o
      Muss überlegen... fällt mir auch was ein?
      Wie wär's mit:
      "Anstatt

      GML-Quellcode

      1. variable="instance";
      2. execute_code(variable+" = 12");

      zu benutzen (was langsam ist), kannst du auch einfach

      GML-Quellcode

      1. variable="instance";
      2. variable_local_set(variable,12);

      schreiben."
      ?
      EDIT: Tschuldigung, "var" geht natürlich nicht, ich habs in "variable" geändert ^^

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

    • RE: Tip + Frage^^

      Original von benny1111200
      Kann man das eig umgehen das bei draw Events der sprite weg geht?...

      Zeichne den sprite einfach manuell im drawevent.
      Wenn du vordefinierte variablen wie image_angle, image_alpha, image_xscale etc. benutzt kannste einfach folgenden code im drawevent ausführen lassen und du wirst den unterschied zu einem Object ohne Drawevent nicht merken:

      GML-Quellcode

      1. draw_sprite_ext(sprite_index,image_index,x,y,image_xscale,image_yscale,image_angle,image_blend,image_alpha)
    • ich finde den tipp ganz gut, denn niemand konnte mir sagen wie man kontrollieren kann ob irgentein object im raum ein sprite hat

      nemen wir an das object heißt obj_ich
      und das sprite das man prüfen will spr_gelb


      GML-Quellcode

      1. if obj_ich.sprite_index=spr_gelb
    • GML-Quellcode

      1. with all
      2. {
      3. if sprite_index=spr_gelb
      4. {
      5. //Bla, bla...
      6. }
      7. }


      EDIT: Ich hab den Post von Cyro erst als Frage verstanden... Naja, mit dem was ich geschrieben habe, kann man kontrollieren, ob überhaupt irgendein Objekt das gewünschte Sprite hat.
      kostenlose Android-Spiele:
      hexavirScribble Triple

      Mr. Peperonico auf Facebook

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

    • Ein Hinweis zu mouse_x und mouse_y: Diese Variblen werden nicht wie man vermuten könnte nur einmal pro step aktualisiert sondern jedes mal wenn man sie benutzt. Sollte man also die Mauskoordinaten benutzen wollen in der Annahme, dass sie im kompletten Script gleich sind, sollte man sie am Anfang des Steps oder Scripts in zwei extra Variblen speichern und nicht jedes mal direkt mouse_x und mouse_y.
    • Benutzer online 1

      1 Besucher