Einzelne externe Sprites in EIN Sprite laden

  • GM 7
  • Einzelne externe Sprites in EIN Sprite laden

    Hallo zusammen!

    Ich habe einige teiltransparente PNG Bilder. Da GM7 nur mit externen teiltransparenten Bildern umgehen kann, möchte ich die Animation (bestehend aus 30 einzelnen Frames) in ein Sprite rein laden, also in etwa so:

    GML-Quellcode

    1. sprite_replace(spr_weint,"Data\Gfx\Pospos\Pospos_heult_001.png",1,0,1,0,1,0,0);


    Das ist ja nun nur mit einem Frame, aber wie bekomme ich die 30 Frames in eine Spriteanimation gepackt? Import und Export als GIF zerstört den Alpha und auf einen extra Alphakanal habe ich ehrlich gesagt auch keine Lust, da warte ich dann doch lieber auf GM8.
  • sprite_add(fname,imgnumb,precise,transparent,smooth,preload,xorig,yorig) Fügt ein Bild aus einer Datei den Sprite-Ressourcen hinzu. Nur bmp, jpg und gif Bilder können geladen werden. Wenn das Bild bmp oder jpg ist kann es als Animationsstreifen mit verschiedenen Subimages nebeneinander geladen werden. imgnumb gibt deren Zahl an (1 für ein einzelnes Bild). Für (animierte) gifs wird dieses Argument ignoriert; die Zahl der Bilder in der gif Datei wird genutzt. precise gibt an, ob präzise Kollisionsüberprüfung genutzt werden soll. transparent gibt an, ob das Bild teiltransparent sein soll. smooth gibt an, ob die Ecken geglättet werden sollen. preload gibt an, ob die Textur in der Speicher vorgeladen werden soll. xorig und yorig geben die Position des Bezugspunktes an. Die Funktion gibt den Index des neuen Sprites zurück um es zu zeichnen oder es über die Variable sprite_index einer Instanz zuzuweusen. Falls ein Fehler auftritt wird -1 zurückgegeben.
    Das müsste bei dir zutreffen.

    MfG Henrik1235
    wupto.net/ Nicht meine Seite!
    We love Koalas.

    GM-D-Spam-o-Meter: 32%
  • Ich merke selber, dass ich mich heute dümmer anstelle als sonst.

    GML-Quellcode

    1. sprite_replace(spr_weint,"Data\Gfx\Pospos\weint\Pospos_heult_001.png",1,0,1,0,1,0,0);
    2. sprite_add("Data\Gfx\Pospos\weint\Pospos_heult_002.png",2,0,1,0,1,0,0);
    3. sprite_add("Data\Gfx\Pospos\weint\Pospos_heult_003.png",3,0,1,0,1,0,0);
    4. sprite_add("Data\Gfx\Pospos\weint\Pospos_heult_004.png",4,0,1,0,1,0,0);
    5. sprite_add("Data\Gfx\Pospos\weint\Pospos_heult_005.png",5,0,1,0,1,0,0);


    Würde bis Bild 30 durch gehen, er zeigt aber nur Bild 1 an und das auch nicht richtig transparent. ?(

    Irgendwo hatte ich hier noch eine Packung Hirn... wo war die nur?
  • sprite_add erstellt ein komplett neues Sprite, kein Subimage.
    Deshalb benutzt du sprite_assign, um das neue Sprite dem alten hinzuzufügen (kopieren). Danach solltest du es wieder löschen.

    GML-Quellcode

    1. var spr;
    2. sprite_replace(spr_weint,"Data\Gfx\Pospos\weint\Pospos_heult_001.png",1,0,1,0,1,0,0);
    3. spr = sprite_add("Data\Gfx\Pospos\weint\Pospos_heult_002.png",1,0,1,0,1,0,0);
    4. sprite_assign(spr_weint,spr);
    5. sprite_delete(spr);
    6. spr = sprite_add("Data\Gfx\Pospos\weint\Pospos_heult_003.png",1,0,1,0,1,0,0);
    7. sprite_assign(spr_weint,spr);
    8. sprite_delete(spr);
    9. spr = sprite_add("Data\Gfx\Pospos\weint\Pospos_heult_004.png",1,0,1,0,1,0,0);
    10. sprite_assign(spr_weint,spr);
    11. sprite_delete(spr);
    12. spr = sprite_add("Data\Gfx\Pospos\weint\Pospos_heult_005.png",1,0,1,0,1,0,0);
    13. sprite_assign(spr_weint,spr);
    14. sprite_delete(spr);
    Alles anzeigen

    Besser wäre allerdings, wenn du das ganze in einen Strip tun würdest, also alle Subimages in ein Bild nebeneinander. Dann gibst du bei dem Parameter imgnumb die Anzahl an Subimages ein, und der Game Maker teilt die Grafik wie gewünscht auf.

    GML-Quellcode

    1. sprite_replace(spr_weint,"Data\Gfx\Pospos\weint\Pospos_heult.png",5,0,1,0,1,0,0);
  • Und damit die Alphakanäle sichtbar bleiben, kannst du noch alle Funktionen durch die Alphaversionen austauschen, z.B.:

    GML-Quellcode

    1. sprite_replace_alpha();
    2. sprite_add_alpha();