weiche Transparenzübergänge im selben Sprite (background)

  • GM 7

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

  • weiche Transparenzübergänge im selben Sprite (background)

    hallo liebe GM Community

    Das Problem, das ich hier habe zeigt sich bei mir schon an mehreren stellen im Programm.
    Ich hatte z.B. vor, einen Cursor zu erstellen, der außen rum auch noch einen leichten Schimmer seiner eigenen Farbe auf den Hintergrund projiziert.

    der Cursor sieht etwa so aus. (ein Screenshot aus GIMP erklärt es glaube ich am besten) wo man die Kacheln erkennt, ist das Bild transparent (für alle, die es nicht wissen).


    Wenn ich dieses Bild dann als bitmap speichere und im Spiel einfüge sieht es so aus:


    der Schimmer ist schon beim speichern zur bitmap kaputt gegangen.
    der rote Hintergrund ist nur provisorisch, um besser sehen zu können, dass der leichte Blauton nicht mehr da ist. eine andere Farbe im background ändert selbstverständlich nichts.

    falls das etwas zu unverständlich ist, hab ich noch ein Beispiel, das das selbe Problem etwas deutlicher zeigt.

    Ich habe mal ein nettes Layout für ein menü erstellt und es auch ordentlich mit Transparenz bearbeitet.

    so siehts in GIMP aus (ihr könnt es anklicken, um es besser zu erkennen):



    ein Mal das Transparenzsystem von GM durchlaufen mutiert es dann dazu:



    also ich denke, ihr seht, was ich erreichen will, aber ich sage es trotzdem nochmal genauer.
    Ich möchte, dass es einen weichen Übergang von dem schwarz des Menüs zum rot des Hintergrundes gibt. es soll sich sozusagen leicht auf den Raum legen, denn ich habe ja auch jedem Pixel eine andere Transparenz (alphawert) gegeben. Momentan kenne ich nur die Methode in GM, das gesamte Bild transparenter zu machen (image_alpha). Das ist in diesem Fall allerdings zu wenig.

    Man würde zwar den Kontrast zwischen schwarz und rot verringern, aber nicht annährend effektiv genug und ich will ja nicht das ganze Layout unsichtbar machen.

    Ich denke allmählich, dass es, wenn überhaupt, nur an dem Dateiformat zu korrigieren ist. GIF kennt keine Transparenz, JPG auch nicht und bei bitmap bin ich mir allmählich nicht mehr so sicher.

    hat von euch vieleicht jemand einen Vorschlag?


    ps. hab mir, weil ich ein so ordentlicher Junge bin auch ganz brav vor meinem ersten post den artikel "wie poste ich richtig" von Niffel DURCHgelesen. ...

    ...

    *a..a..angst :S ;( *

    Ich hoffe, das war in einer "längst vergangenen Zeit", was er da alles geschrieben hat. Als ich zum ersten mal auf dieses Forum kam, schien alles so friedlich und farbenfroh.
    Da müssen ja wirklich ne Menge Leute den admins an die Beine gepi... sorry ... uriniert haben, dass man so deutlich werden muss. :D

    zu meinem problem hab ich aber wirklich nie die richtige Hilfe gefunden.
    ___________________________________________
    ERROR in
    action number 5
    of Collision Event with object Herausforderung
    for object Mori:

    Error in code at line 21:
    if Angst >= 10 {flucht = true}

    at position 5: Unknown variable Angst
    :evil:
  • Servus erstmal,

    also ich würde das mit draw_set_blend_mode lösen. Diese Funktion ist allerdings nur mit der Pro Edition des GM verfügbar. Also ich nehm jetzt mal an, du hast Pro und erklär dir, wie ich den Cursor machen würde. Zuerst ein Bild vom Cursor (ohne Schimmer) machen. Dann ein Bild vom Schimmer auf schwarzem Hintergrund. Und dann im draw_event folgenden Code:

    GML-Quellcode

    1. draw_set_blend_mode(bm_add) //indiziert den Blendmodus bm_add
    2. draw_sprite(spr_schimmer,-1,mouse_x,mouse_y) //zeichnet den Schimmer an die Mausposition
    3. draw_set_blend_mode(bm_normal) //resetet den Blendmodus
    4. draw_sprite(spr_cursor,-1,mouse_x,mouse_y) //zeichnet den Cursor an die Mausposition


    Ich hoffe dir hilft das. Wenn du kein Pro hast, weiß ich leider auch grad keine Alternative
    Anderer Leuten Signaturen sind... anderer Leuten Signaturen!


  • Raphi schrieb:

    Ich hoffe dir hilft das. Wenn du kein Pro hast, weiß ich leider auch grad keine Alternative
    Ein Blick in sein Profil hätte dir verraten, dass er die Pro Version hat.

    @Topic:
    Da hat sich mal jemand Gedanken gemacht, bevor er auf den "Post abschicken"-Button gedrückt hat :D

    1: Transparenzen gibt es nicht im BMP-Format. Verwende dafür besser das PNG-Format.
    2: Der Game Maker unterstützt keine transparenten Farben. So kannst du dir helfen:

    Du erstellst 2 Sprites deines Cursors, einmal ganz normal, das zweite als Schwarz-Weis-Bild (Alpha-Bild).
    Das sieht dann so aus:

    Normaler Cursor:

    Alpha-Bild:

    (3x vergrößert):


    Beide Bilder fügst du im GM als Sprites ein. Im Cursor-Objekt schreibst du dann ins Create-Event diesen Code:

    GML-Quellcode

    1. sprite_set_alpha_from_sprite(spr_cursor,spr_cursor_alpha); //Der Cursor-Sprite erhält die Transparenz-Informationen des Alpha-Sprites
    2. sprite_delete(spr_cursor_alpha); //Der Alpha-Sprite kann gelöscht werden, da er nicht mehr benötigt wird. Das schont den Arbeitsspeicher


    Das fuktioniert so: Der normale Sprite wird mit dem Alpha-Sprite verglichen. Je dunkler ein Pixel auf dem Alpha-Sprite ist, desto transparenter ist der jeweilige Pixel auf dem richtigen Bild. Wenn das nicht verständlich rüberkam, such am besten mithilfe der Suchfunktion nach den Stichworten "alpha" und "transparenz".

    Willst du nun also einen Schein um deinen Sprite, musst du im Alpha-Bild einfach nur einen grauen Kreis um den Kursor legen. Schon sind an diesen Stellen die Farben transparent. (Wie sehr, entscheidest du durch die Wahl der Grau-Helligkeit)

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

  • Du kannst deine Grafik auch im PNG-Format speichern (mit Alphakanal). Der GM bietet dafür die Möglichkeit, diese Sprites vom Spiel aus zu laden. Schau dir dazu mal "sprite_add_alpha()" und "sprite_replace_alpha" in der Hilfe an. Ab GM8 wird man transparente Grafiken dann auch direkt in den GM laden können. Wenn du nicht willst, dass jemand deine Grafiken klauen oder ändern kann, gibt es auch noch verschiedene Möglichkeiten, sie zu verschlüsseln.
    █████ ██ █ ████ everything ███ █████ is █████ ████ ████ fine ████ ███ █ ██████ love.
    █████ ███████ ███ your █████ ████ government.
  • cool. danke für die Hilfe. :)

    @Raphi
    danke, aber ich hab leider noch nicht richtig mit dem draw geübt. Außerdem soll sich der Cursor am ende mit den Pfeiltasten steuern lassen, bzw. er tut es schon. Ich weis leider nicht, ob deine alternative funktioniert hätte. Ich glaube, dass man da auch dem sprite den selben Hintergrund, wie dem Hintergrund im Raum geben müsste (würde bei mir nicht gehen), aber egal. Trotzdem danke

    @Toshiro
    dass ist genau das, was ich gesucht habe. Hat auch alles auf Anhieb funktioniert, muss aber noch bisschen am Bild rumbasteln, damit es so aussieht, wie ich es haben möchte. Bis jetzt ist es noch eher ein unsauberes Etwas mit hässlichem Hintergrund und einem Cursor, der sich im Nichts befindet. Mach ich alles noch.
    Im Nachhinein habe ich dann alle möglichen Erklärungen im Forum gefunden. Ich habe wohl wirklich nach den falschen Begriffen wie "sprite teilweise transparent fade in usw." gesucht. das war Dummheit meinerseits.
    Sorry deswegen

    @mauge
    auch dir ein herzliches Dankeschön, dass du dir so spät noch die Mühe gemacht hast. Ich werd deine Methode wohl auch mal testen, um zu sehen, was am Ende besser aussieht, bzw. einfacher einzustellen ist.
    Bilder
    • snapshot.JPG

      45,59 kB, 800×600, 165 mal angesehen
    • Ergebnis + etwas Liebe.JPG

      44,59 kB, 800×600, 183 mal angesehen
    ___________________________________________
    ERROR in
    action number 5
    of Collision Event with object Herausforderung
    for object Mori:

    Error in code at line 21:
    if Angst >= 10 {flucht = true}

    at position 5: Unknown variable Angst
    :evil:

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

  • Mori Toscore schrieb:

    @mauge
    auch dir ein herzliches Dankeschön, dass du dir so spät noch die Mühe gemacht hast. Ich werd deine Methode wohl auch mal testen, um zu sehen, was am Ende besser aussieht, bzw. einfacher einzustellen ist.

    Kann ich dir auch gern jetzt schon sagen:
    1. Im additiven Blend Mode zu zeichnen ist das einfachste, aber das Ergebnis wird nicht 100%ig das sein, was du willst.
    2. Für jedes Sprite ein extra Alphasprite anzulegen ist Speicherverschwendung vom feinsten. Du wirst etwa doppelte Resourcen verbrauchen, da der GM jede Grafik im BMP-Format im Speicher ablegt (egal, ob du es als JPG, GIF oder PNG in den GM lädst).
    3. Externe Dateien zu verwenden ist zwar am aufwendigsten, aber auch speicherschonend. Noch dazu kannst du frei entscheiden, wann du die Grafiken laden willst. Das verhindert lange Startladezeiten.
    █████ ██ █ ████ everything ███ █████ is █████ ████ ████ fine ████ ███ █ ██████ love.
    █████ ███████ ███ your █████ ████ government.
  • Benutzer online 1

    1 Besucher