Seite 1 von 2
Transparente Sprites
Verfasst: 14.06.2011 15:21
von CptGreenwood
Hi,
ich habe noch ein wenig Probleme mit der Darstellung von transparenten Sprites, was wahrscheinlich daran liegt, dass ich den speziellen "Kniff" noch nicht herausgefunden habe.
Ich möchte einen Sprite darstellen, der transparente Teile haben soll. In einem Paint-Programm bastele ich mir die Dinger zusammen. Dabei benutze ich reines Margenta (255,0,255) als transparente Farbe. Bei rechteckigen Aussparungen ist das auch kein Problem, da es da einen klaren Übergang zwischen dem Bild und dem transparenten Teil gibt. Probleme habe ich bei runden Kanten. Wenn ich den Bereich, den ich transparent haben möchte, einfach mit dem "Zauberstab" auswähle und dann mit dem Eimer Margenta drüber kippe, habe ich am Übergang zwischen Bild und Transparentteil einen hässlichen unge-antialias-ten Treppeneffekt. Blende ich sanft zwischen Bild und Margenta über, so bleiben am Bildrand margentafarbene Punkte übrig, da die eben nicht rein Margenta sind und damit nicht durchsichtig werden.
Jetzt sehe ich aber doch bei vielen Spielen auch Sprites mit runden Kanten, die echt super aussehen, ohne Treppchen oder margentafarbene Ränder. Wie gehe ich denn da am besten vor?
Danke im Voraus.
Greetz,
CptGreenwood
Re: Transparente Sprites
Verfasst: 14.06.2011 15:35
von °°°
Du könntest dir mal DisplayAlphaSprite und ChangeAlphaIntensity in der Hilfe anschauen.
Kann dir nicht mehr helfen da ich das selbst noch nicht benutzt habe.
Ich habe bei meinen Bildern immer die einzelnen Pixel gefärbt mit dem Pinsel (Treppeneffect aber ohne das blöde Rosa). Aber das waren auch kleine bilder so 30*30 Maximal.
Re: Transparente Sprites
Verfasst: 14.06.2011 15:41
von STARGÅTE
Das benutzen eines Sprites/Bild bei dem eine Farbe als Transparent definiert wird, ist meiner Meinung nach "veraltet".
Das einfachste und auch schnellere ist die Nutzung von echten 32-Bit Bildern/Sprites die einen vollen Alpha-Kanal unterstützen.
Dafür musst du dann jedoch DisplaySprite3D nutzen, was bei Spielen oder vielen Sprite eh zu empfehlen ist, da Sprite3D mit DirektX9 "beschleunigt" wird.
Beim Laden des Sprite dann einfach #PB_Sprite_AlphaBlending hinzufügen.
Re: Transparente Sprites
Verfasst: 14.06.2011 15:56
von CptGreenwood
Habe mir schon irgendwie gedacht, dass das mit der transparenten Farbe nicht der Weisheit letzter Schluss ist.
Nun habe ich es nicht so mit den Paint-Programmen... Wie erstelle ich den z.B. einen Kreis-Sprite, der an den Rändern "weicher" durchsichtig wird?
Re: Transparente Sprites
Verfasst: 14.06.2011 16:00
von STARGÅTE
Wenn du das
Paint von
Microsoft meinst, dann garnicht.
Da brauchst du schon ein etwas "erweitertes" Zeichenprogramm.
Ein gutes, umfangreiches und kostenloses Programm ist:
Gimp
Dort kannst du dann direkt einstellen, dass du ein transparentes 32-Bit Bild haben möchtest.
Und beim Zeichnen eines geglätteten Kreises wird dann der Rand automatisch im Alpha-Kanal ausgeblendet.
Re: Transparente Sprites
Verfasst: 14.06.2011 16:07
von CptGreenwood
Ich benutzt Paint.NET, das ist nicht unbedingt Photoshop aber für den ambitionierten Amateur hat's immer gereicht. Verstehe aber, was du meinst. Das trifft dann beim Neuzeichnen einer Form auf einem 32bit-Alpha-Pic zu. Aus Mangel an zeichnerischem Talent hole ich mir die ein oder andere Figur aus dem Internet oder bastele sie in PowerPoint aus den Standardformen zusammen, copy-paste sie dann in Paint.NET und bearbeite sie darin (bisher mit dem "Margenta-Hammer").
Bekomme ich solche übernommenen Elemente auch sauber ausgeblendet?
Re: Transparente Sprites
Verfasst: 14.06.2011 16:18
von helpy
Hallo,
Grafiken kann man auch schön mit Inkscape (Vektorgrafik-Programm) im SVG-Format erstellen! Damit lässt sich meiner Ansicht nach komfortabler arbeiten als mit Programmen wie Gimp, Photoshop, ...
Aus Inkscape kann man dann sehr gut PNG-Grafiken exportieren (z.B. auch über die Befehlszeile in einer Batch-Datei).
Falls die Grafiken/Sprites relativ klein sind und die gerenderte PNG-Grafik nicht so gut aussieht, könnte man noch mit Inkscape ein größeres PNG exportieren (2-, 4- oder 8-fache Größe) und dieses dann mit Gimp (oder einem anderen Bildverarbeitungsprogramm) entsprechend verkleinern. Das könnte dann etwas bessere Ergebnisse liefern.
Beispiel: Ich habe z.B. 256 Grafiken (alle in gleicher Größe) mit Inkscape als SVG-Grafik erstellt und mittels eines Shell-Skripts (unter Linux ... geht auch mit Batch unter Windows) lasse ich mir dann mehrere Sätze von PNG-Grafiken in verschiedenen Größen (8x8, 16x16, 24x24, 32x32 ... Pixel) erzeugen.
Inkscape unterstützt 32Bit RGBA!
Gruß,
Guido
Re: Transparente Sprites
Verfasst: 14.06.2011 16:22
von STARGÅTE
Du musst auf alle Fälle bei deinen Bildern (die vermutlich 24Bit sind) einen Alpha-Kanal hinzufügen.
Dann gibt es eine Funktion, die heißt: "Farbe zu Transparen"
Dort kannst du eine Farbe wählen die Transparent werden soll.
Dann wird allen Pixel, die diese Farbe (teilweise oder kmoplett) enthalten, ein Alpha-Wert zugewiesen.
Dann wäre in deinem Beispiel mit FF00FF diese Farbe komplett transparent, FF0080 wäre halbtransparent usw.
Allerdings bezweifel ich, dass das ergebnis den gewünschten Effekt hat.
Denn dann wird nicht der der gewünschte Rand ausgeblenet, sonden auch jeder andere Bereich in dem auch nur bruchteile von Magenta vorkommen.
Re: Transparente Sprites
Verfasst: 14.06.2011 16:33
von CptGreenwood
Werde es mit euren Tips mal ausprobieren. Habe mir Gimp runtergeladen (bei InkScape muss ich ja selbst zeichnen

). Gar nicht so einfach die Geschichte...
Re: Transparente Sprites
Verfasst: 14.06.2011 16:36
von helpy
CptGreenwood hat geschrieben:... bei InkScape muss ich ja selbst zeichnen

)
ach

... und mit Paint oder Gimp muss man nicht selbst zeichnen?