Roter Schleier

  • GM 7
  • Roter Schleier

    Hey Leute, ich hatte die Idee in meinem First Person shooter, den Ganzen Bildschirm in einen Roten schleir zu Hüllen, wenn man von einem Monster angegriffen wird. (Oder Noch besser nur ein Roter Rand)
    Wisst ihr in etwa was ich meine? Habe leider keinen Screenshot gefunden.
    Ach ja, der Schleier sollte nachtürlich nach geraumer Zeit wieder verschwinden, wenn einem der Gegner nicht mehr angreifft.
    Hoffe auf eure Hilfe.

    PS: Es Könnte auch anstelle eines Roten Schleiers eine Art Roter Blitz sein, (Will heissen das Ganze Bild wird Kurzzeitig Vollständig Rot [Undurchsichtig] Was aber sofort wieder Verschwindet. Einfacher aber wohl nicht ganz so Qualitativ) :thumbsup:

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

  • Ok, klar soweit. Und was willst du jetzt wissen?
    █████ ██ █ ████ everything ███ █████ is █████ ████ ████ fine ████ ███ █ ██████ love.
    █████ ███████ ███ your █████ ████ government.
  • xxskxx schrieb:

    Du drawst einfach ein rotest Rechteck über den gesamten Bildschirm und lässt es mit der Alpha Funktion
    wieder verschwinden. Das musst du noch verfeinern damit ein guter Effekt dabei raúskommt. Das ist
    aber im Grunde sehr einfach.


    Das hat er ja soweit beschrieben. Da er aber von einem First Person Shooter spricht, geh ich davon aus, dass es sich um ein 3D Spiel handelt. Ich bin mir jetzt nicht sicher, ob die Darstellung einer 2D Fläche das Problem ist, oder die Verwendung von Blend Modes und/oder Transparenz.
    █████ ██ █ ████ everything ███ █████ is █████ ████ ████ fine ████ ███ █ ██████ love.
    █████ ███████ ███ your █████ ████ government.
  • Also ich habe jetz einfach mal ein Sprite erstellt, welches Ganz Knall rot ist.
    Und dann das geschrieben.

    GML-Quellcode

    1. draw_set_alpha(0.5)
    2. draw_sprite(DMG,-1,250,250)

    Doch trotz der set alpha Funktion bleibt das Bild undurchsichtig.
    Oder habe ich da was falsch verstanden? Mach Alpha das Bild nicht durchscheinend?

    PS: 8| Habe gerade gemerkt dass GML Ja sehr ähnlich mit Java ist, :thumbsup: und da wir Java in der Schule lernen ist das vileicht doch möglich für mich, GML zu verstehen. :gmlove:

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

  • Das funktioniert bei Sprites so nicht. Schau dir in der Hilfe mal "draw_sprite_ext()" an. Der letzte Parameter steht für die Transparenz.
    █████ ██ █ ████ everything ███ █████ is █████ ████ ████ fine ████ ███ █ ██████ love.
    █████ ███████ ███ your █████ ████ government.
  • apple987123 schrieb:

    Also ich habe jetz einfach mal ein Sprite erstellt, welches Ganz Knall rot ist.
    Moment mal, auch der von dir gewünschte rote Rand lässt sich ohne größere Schwierigkeiten erstellen. Der Schlüssel hierzu sind Blend-Modes.
    Schau dir einfach mal in der Hilfe an, was das ist, dann solltest du mein folgendes Beispiel auch ohne Probleme verstehen.

    EDIT: Ich vergaß zu sagen, dass man im Beispiel Space drücken muss, um den roten Schleiereffekt zu erzielen.
    Dateien

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

  • WOW
    Das sieht ja wirklich suuuper aus.
    Vielen dank.
    Aber klappt das auch be einem Game in D3D?

    EDIT: Habe es versucht, aber in d3d geht das leider nicht so einfach =(
    Wenn ich das spiel starte sind erst mal alle Objekte Schwarz, und wenn ich dann Space drücke Wird der BODEN rot verschleiert. :vogel:
    Merkwürdig, aber wenn ich das in die d3d Sicht bekomme sieht das sicher Super aus.

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

  • Doch, auch in 3D funktioniert das einwandfrei (habe ich gerade getestet). Du musst nur sichergehen, dass du die üblichen Formalitäten beim Zeichnen von 2D-Bildern im 3D-Modus nicht außer Acht lässt.

    Der Code muss also folgendermaßen eingerahmt werden:

    GML-Quellcode

    1. d3d_set_projection_ortho(0,0,640,480,0)
    2. d3d_set_hidden(0);
    3. // Hier der Code
    4. draw_set_color(c_white);
    5. draw_set_alpha(1);
    6. d3d_set_hidden(1);
    7. d3d_set_projection_perspective(0,0,640,480,0);

    640 und 480 sind hierbei Platzhalter für die Breite bzw. Höhe des Anzeigefensters.
  • Ich bekomme das einfach nicht hin :headtouch:
    Nun sind die 2D Objekte Unsichtbar, da meinste glaube ich das:
    Spoiler anzeigen
    Du musst nur sichergehen, dass du die üblichen Formalitäten beim Zeichnen von 2D-Bildern im 3D-Modus nicht außer Acht lässt.

    Aber was meinst du genau damit?
    Und ausserdem ist nur der obere Linke Bildschirm teil Rot =(
    Habe das File mal Hochgeladen

    KLICK MICH AN WENN DU NETT BIST!


    Villeicht kannst du mir erklären woran der Fehler liegt wenn du das File mal Anschaust. PS: Must in Room 1 das Objekt object0 löschen, wenn du wissen willst wie es normalerweise aussieht.
  • Setz mal die Depth von "object0" niedriger. Ich hab sie zum Testen auf -500 gesetzt. Dann siehst du zumindest schonmal deine Monster. :)
    █████ ██ █ ████ everything ███ █████ is █████ ████ ████ fine ████ ███ █ ██████ love.
    █████ ███████ ███ your █████ ████ government.
  • Toll, nun sehe ich wenigstens die Monster und die anderen Objekte und es klappt auch dass der ganze Schirm ausgefüllt wird.
    Aber wie muss ich das
    Spoiler anzeigen

    GML-Quellcode

    1. switch (keyboard_key)
    2. {
    3. case vk_left: view_xview[0] -= 4; break;
    4. case vk_right: view_xview[0] += 4; break;
    5. case vk_up: view_yview[0] -= 4; break;
    6. case vk_down: view_yview[0] += 4; break;
    7. }
    8. if (keyboard_check(vk_space))
    9. {blendcol_val = 255;}
    10. if (blendcol_val > 0)
    11. {blendcol_val -= 10;}
    12. if (blendcol_val < 0)
    13. {blendcol_val = 0;}
    Alles anzeigen


    Ändern, damit es nur ausgeführt wird, wenn obj_player mit obj_monster1; Monster2 oder Monster3 Kollidiert? Und nicht beim drücken von Space? ?(
    Habe langsam den Überblick verloren.

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

  • Wenn du uns noch mitteilst, wo die Kollision zwischen Spieler und Monstern geprüft wird, können wir dir auch helfen. Ich für meinen Teil hab jetzt keine Lust, das ganze Wirrwarr zu durchsuchen.
    █████ ██ █ ████ everything ███ █████ is █████ ████ ████ fine ████ ███ █ ██████ love.
    █████ ███████ ███ your █████ ████ government.
  • Ja, die Depth von object0 muss schonmal niedriger sein als von "Monster2", also kleiner als -10 (-500 geht natürlich genauso gut ^^).
    Das Script im Stepevent hat in meinem Beispiel auch die Bewegung des Views sowie das Auftreten des Effektes bei Betätigung der Space-Taste geregelt, du musst diesen Teil bei dir natürlich löschen (alles bis Zeile 11). Dann, um den Effekt nur bei Monsterkontakt auszuführen, schreibst du einfach ins Step-event jedes deiner Monsterobjekte folgendes:

    GML-Quellcode

    1. if (point_distance(x,y,global.camx,global.camy) < 12)
    2. {object0.blendcol_val = 255;}

    (Ich habe mich zufälligerweise schonmal ein wenig mit dem Yoyogames-shooterbeispiel beschäftigt, deshalb weiß ich noch von damals, wo die Kollisionen abgefragt werden ;))

    EDIT: Im Beginstep-event macht sich das in diesem Fall natürlich genauso gut.
  • Benutzer online 1

    1 Besucher