Spites und Tiles in einem Script zeichnen

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

  • Spites und Tiles in einem Script zeichnen

    Moin!

    Ich will einen Script schreiben, bei dem Sprites auf Tiles gezeichnet werden sollen.
    Mein problem ist, dass die Tiles irgendwie immer vor den Sprites gezeichnet werden, was ja nicht Sinn der Sache ist.

    Ich habe mit der Depth bei tile_add() rumgespielt, ich hab die Depth des Objekts verändert, das das Skript ausführt. Ich hab sogar im Skript versucht, die Depth der Sprite-Ressource zu ändern (seltsamerweise hat das sogar kompiliert...), aber es hat alles keinen Unterschied gemacht.
    Und ja, ich hab natürlich auch überpüft, ob ich nicht nen Denkfehler habe, wie die Zeichenreihenfolge funktioniert.

    Ist mal wieder ne Frage der Kategorie "Ich kann zwar programmieren, aber ich kenne bei weitem noch nicht alle Eigenheiten vom GameMaker"...
  • Du kannst nicht die Depth von Sprites ändern, sondern nur von Objekten. Wenn Objekte die gleiche Depth haben, wird immer die zuletzt gezeichnete (also die jüngste) oben gezeichnet.
    █████ ██ █ ████ everything ███ █████ is █████ ████ ████ fine ████ ███ █ ██████ love.
    █████ ███████ ███ your █████ ████ government.
  • Ist mir auch klar. War auch eher ne Verzweiflungsaktion.

    Also nochmal: Ich will in einem Skript zuerst einen Untergrund von Tiles zeichnen und darauf dann die Sprites. Die die Sprites werden also mit der Depth des Objekts gezeichnet.
    Wie stehts also mit den Tiles? Reicht die Depth-Angabe in tile_add? Muss ich im Room-Editor eine entsprechende Tile-Ebene einfügen?
  • Wenn du via GML einen neuen Tile-Layer (also nicht das Sheet, sondern die 'Ebene') hinzufügst, hat das sen gleichen Effekt, wie wenn du im Room-Editor alles manuell einstellst.

    Ich hoffe nur, dass du daran gedacht hast, dass je kleiner der Wert der Depth ist, umso weiter vorne wird die Ebene gezeichnet.

    Sprich: 10000 kommt ganz hinten,
    dann kommt 9999 davor, dann 9998 ...
    usw...
    dann 1, dann 0, dann -1 usw... bis -10000.

    Viele verwechseln das noch und denken es sei genau andersherum.
    Hier werden sie geholfen:
    [Regeln] [GML] [Hilfe] [Suche] [Posten] [Duden.de]
    [Wenn das alles nicht mehr hilft] [Dunning-Kruger]


    "Die Vernunft sollte Autorität definieren; nicht umgekehrt!"
    "Selber denken regt das Gehirn an."
    - Niffel f.k.a. Kilik
  • RE: Spites und Tiles in einem Script zeichnen

    Ich hasse es, mich selbst zu zitieren, aber:
    Original von Firemage

    Und ja, ich hab natürlich auch überpüft, ob ich nicht nen Denkfehler habe, wie die Zeichenreihenfolge funktioniert.



    Also ja, daran habe ich natürlich gedacht, und auch nochmal ausprobiert.


    Aber vielleicht kommen wir mit dem Tile-Layer der Sache näher! Wie kann man die per GML erzeugen? Oder reicht es einfach die Funktion

    tile_add(background,left,top,width,height,x,y,depth)

    zu benutzen?
    Angezeigt werden die Tiles so, auch wenn ich keine Depth angebe, die ich auch als Ebenen-Depth im Room-Editor benutze.
  • Hm, wir können jetzt hier noch lange konstatieren, wo der Fehler jetzt liegen mag, aber ich würde vorschlagen du verrätst uns mal einfach den Code. Eventuell finden sich da kleine Flüchtigkeitsfehler.

    So wie du es bisher beschrieben hast scheinst du ja alles richtig gemacht zu haben, was dann aber dem Ergebnis widerspricht.
    Hier werden sie geholfen:
    [Regeln] [GML] [Hilfe] [Suche] [Posten] [Duden.de]
    [Wenn das alles nicht mehr hilft] [Dunning-Kruger]


    "Die Vernunft sollte Autorität definieren; nicht umgekehrt!"
    "Selber denken regt das Gehirn an."
    - Niffel f.k.a. Kilik
  • Besser ist wohl! :D
    Um auch mal den genauen Zweck zu beschreiben:
    Das wird eine Textbox. Den Hintergrund und den Text muss man dabei selbst zeichnen. Ich finde dann wird das individueller als die Standard-True-Type-Fonts zu benutzen, und es sieht konsolenartiger aus. :)
    Wird auch der Allgemeinheit zur Verfügung gestellt, wenn es fertig ist!

    GML-Quellcode

    1. {
    2. ursprung_x = argument0;
    3. ursprung_y = argument1;
    4. breite = argument2; //in Tiles, vom Ursprung nach rechts
    5. hoehe = argument3; //in Tiles, vom Ursprung nach unten
    6. text = argument4;
    7. status_x = 0;
    8. status_y = 0;
    9. for(yy = 0; yy < hoehe; yy += 1)
    10. {
    11. for (xx = 0; xx < breite; xx += 1)
    12. { // Textbox zeichnen; Box ist Tileset mit 3x3 Feldern wg. Rahmen
    13. if((xx == 0) and (yy == 0))
    14. {
    15. status_x = 0;
    16. status_y = 0;
    17. }
    18. else if((xx == breite-1) and (yy == 0))
    19. {
    20. status_x = 2;
    21. status_y = 0;
    22. }
    23. else if((xx == 0) and (yy == hoehe-1))
    24. {
    25. status_x = 0;
    26. status_y = 2;
    27. }
    28. else if((xx == breite-1) and (yy == hoehe-1))
    29. {
    30. status_x = 2;
    31. status_y = 2;
    32. }
    33. else if(xx == 0)
    34. {
    35. status_x = 0;
    36. status_y = 1;
    37. }
    38. else if(xx == breite-1)
    39. {
    40. status_x = 2;
    41. status_y = 1;
    42. }
    43. else if(yy == 0)
    44. {
    45. status_x = 1;
    46. status_y = 0;
    47. }
    48. else if(yy == hoehe-1)
    49. {
    50. status_x = 1;
    51. status_y = 2;
    52. }
    53. else
    54. {
    55. status_x = 1;
    56. status_y = 1;
    57. }
    58. tile_add(tile_background,
    59. status_x * 32,
    60. status_y * 32,
    61. 32,
    62. 32,
    63. ursprung_x + 32*xx,
    64. ursprung_y + 32*yy,
    65. 1000000);
    66. }
    67. }
    68. write_on_screen(ursprung_x, ursprung_y, spr_font, text);
    69. }
    Alles anzeigen