Fragen zu: Sprites (strips) / Tiles aus Datei laden, ausserdem: Vererbung, Variablennamen

  • GM 8

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

  • Fragen zu: Sprites (strips) / Tiles aus Datei laden, ausserdem: Vererbung, Variablennamen

    Ich habe vor meine Objekte aus Dateien laden zu lassen.
    D.h., ich habe ein Standardobjekt, mit dem programmiere ich alle Aktionen im GM(L) und fülle dann die Eigenschaften wie Typ, Name, Grafik usw. beim laden aus einer externen Datei.
    Meine Frage ist nun, wenn ich eine Grafik habe in der z.b. ein ganzes tileset existiert.
    Wie lade ich für das Objekt die Sprites an Position x1,y1, mit höhe1 und breite1, und x2,y2, mit höhe2 und breite2 als Subimages 1,2,3 usw?

    Ich bin mir auch noch nicht ganz sicher ob ich
    a) für jedes Objekt einfach nur ein Array anlegen soll mit den Eigenschaften, und dann beim anlegen der Instanzen die Eigenschaften befüllen
    oder
    b) jedes Objekt vom Standardobjekt erben soll, mit den gewissen Eigenschaften, und dann die Instanzen der Einzelobjekte verwenden?

    Zu (b) ist mir dann auch nicht ganz klar wie die Objektbenahmung dann funktionieren soll. Kann man Variablennamen in GML dynamisch halten?
  • Hmmm...
    Also zur ersten Frage:
    Ich würde das komplette Bild erstmal als Sprite mit nur einem image_index, laden, mit:

    GML-Quellcode

    1. var sprite_temp;
    2. sprite_temp = sprite_add(fname,imgnumb,precise,transparent,smooth,preload,xorig,yorig);


    Dann würde ich eine Surface erstellen und das Sprite stückweise dadrauf zeichnen mit draw_sprite_part(sprite,subimg,left,top,width,height,x,y);
    Wie man auf eine Surface zeichnet kannst du hier nachlesen.
    Und zum Schluss, jedes Mal, wenn du auf die Surface gezeichnet hast, würde ich ein neues Sprite erstellen von der Surface aus erstellen mit sprite_create_from_surface(id,x,y,w,h,precise,transparent,smooth,preload,xorig,yorig);
    und dann die erstellten Sprites zu einem Hauptsprite hinzufügen mit sprite_assign(spr_main,spr_copy); oder mit sprite_merge(spr_main,spr_copy); (bin mir nicht mehr sicher, was was ist).
    Ich hab das selbst noch nicht gemacht, aber von der Idee her müsste es klappen, wenn ich nichts vergessen hab.

    Zu (b) weiß ich nicht was du genau meinst. Aber ich würds mit der Vererbung machen.

    MfG

    Albert Einstein schrieb:

    Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.
  • Vielen Dank für die Hilfe!

    Ich habe hier mal meinen script code zum laden eines Sprites aus einer Datei:

    GML-Quellcode

    1. var sprite_temp;
    2. globalvar test_sprite;
    3. globalvar new_animated_sprite;
    4. var i;
    5. surface=surface_create(30,40);
    6. // Lade Bild zum zerhacken
    7. sprite_temp = sprite_add("Sprite_template.png",1,true,false,0,0);
    8. //Zeichne in die Surface
    9. surface_set_target(surface);
    10. // Größe der Sprites
    11. sprite_h = 32;
    12. sprite_w = 20;
    13. for (i = 0; i < 4; i=i+1)
    14. {
    15. // zeichnen eines Ausschnittes aus sprite_temp
    16. draw_sprite_part(sprite_temp,0,0,165+i*sprite_h,sprite_w,sprite_h,0,0);
    17. // surface umwandeln in ein Sprite
    18. test_sprite[i] = sprite_create_from_surface(surface,0,0,sprite_w,sprite_h,true,false,0,0); // Das muss kein Array sein, nur zum testen
    19. if (i==0)
    20. {
    21. // Das erste Sprite kopieren, nicht mergen, sonst wird automatisch das letzte generierte Sprite genommen
    22. new_animated_sprite = test_sprite[i];
    23. }
    24. else
    25. {
    26. // Den neuen Sprite hinten anfügen am Strip
    27. sprite_merge(new_animated_sprite,test_sprite[i])
    28. }
    29. }
    30. // Wieder auf dem normalen Bildschirm zeichnen
    31. surface_reset_target();
    Alles anzeigen


    Ich glaube auch Vererbung wäre das bessere.

    Was mir nicht klar ist, kann man hier wie in PHP dynamische Variablennamen erzeugen?

    Quellcode

    1. $blabla = "testblabla"
    2. $$blabla <-- diese Variable heisst jetzt $testblabla
  • Was mir nicht klar ist, kann man hier wie in PHP dynamische Variablennamen erzeugen?
    Mit den Funktionen auf http://www.gm-d.de/help/403_11_misc.html .
    Zum Beispiel gibt:

    GML-Quellcode

    1. variable_local_get("test")

    Den Inhalt der Variable test:

    GML-Quellcode

    1. test=42
    2. variable_local_get("test")==test
    wupto.net/ Nicht meine Seite!
    We love Koalas.

    GM-D-Spam-o-Meter: 32%