flammeneffekt mit LITE

  • GM 7

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

  • flammeneffekt mit LITE

    hey leute,ich würd gern einen shooter machen,bei dem auch ein flammenwerfer vorkommt.nur leider kann ich in der lite keine partikel benutzen,weshalb ich keinen schönen flammeneffekt hinbekomme.ich hätte es mal versucht,aber es sieht richtig beschis*** aus.jetzt wollte ich mal fragen,ob man auch in der lite einen solchen effekt hinbokommt.
    mein effekt ist im anhang:



    stevey
    Dateien
    • effekt.rar

      (72,42 kB, 208 mal heruntergeladen, zuletzt: )
  • Morgen, war grad immernoch wach und da hat es mich richtig gebizelt, das Letzte aus dem GM Lite rauszuholen, als ich das gelesen hab. Ich wüsste nicht, wie man's viel besser hinkriegen kann:
    Dateien
    Anderer Leuten Signaturen sind... anderer Leuten Signaturen!


  • Ich wusste bisher gar nicht, dass "image_alpha" auch in der Lite Version zur Verfügung steht. Dieses neue Wissen hat mich so sehr gereizt, dass ich Raphi's gmk nochmal überarbeiten musste. Anfangs wollte ich eigentlich nur mal rumprobieren, was mit der Lite Version tatsächlich möglich ist. ^^
    @Raphi: Du erzeugst pro Step 25 Objekte für die "Feuerpartikel". Der Testlauf im Debugmodus hat ergeben, dass knapp 1.000 Objekte gleichzeitig dargestellt werden. Das ist verdammt viel und wird wohl das Spiel beizeiten in die Knie zwingen.

    Mein Ziel war es, das Ganze mit möglichst annehmbarer Grafik auf unter 50 gleichzeitig dargestellte Objekte zu senken. Folgende Änderungen hab ich also an der gmk von Raphi vorgenommen. Zuerst musste die Feueranimation im GM Editor dran glauben, damit der Feuerstrahl eine sanftere Animation erhält. Die Anzahl der zu erzeugenden Flammenobjekte hab ich von 25 auf 2 gesenkt. Ihre Lebensdauer ist auch wesentlich kürzer. Im Gegenzug bewegen sie sich viel schneller. Das bringt uns nun auf ca. 40 Objekte gleichzeitig. Alles andere ist Feintuning der zusätzlich angelegten Werte, die weiter unten aufgelistet sind.
    Da die Lite Version "image_angle" sowie die Darstellung in anderen Blend Modes nicht zulässt, ich aber die einzelnen "Feuerpartikel" nicht alle gleich aussehen lassen wollte, werden sie wenigstens zufällig gespiegelt und "vibrieren" ein wenig. Somit ist etwas Bewegung im Strahl. Der Code hierfür befindet sich im Step Event von obj_fire unter "// Size".
    Der letzte Code-Block im Step Event von obj_fire sorgt dafür, dass die Flammen in Rauch aufgehen, d.h. sie färben sich am Ende dunkelgrau. Ich musste diesen Teil aber leider ausklammern, nachdem mir aufgefallen ist, dass auch "image_blend" für Lite User nicht verfügbar ist. Das könnte man aber ziemlich leicht mit einem zusätzlichen Rauch-Sprite umgehen.

    Um den Feuerstrahl anzupassen, können folgende Änderungen vorgenommen werden:

    Step Event von obj_player unter "// Fire":

    1. die Zahl in "repeat(2)" erhöhen, um mehr "Partikel" pro Step zu erzeugen. Um gute Performance zu gewährleisten, sollten keine zu hohen Werte eingesetzt werden.
    2. im "motion_set"-Befehl bei dem Teil "point_direction(x,y,mouse_x,mouse_y)-2+random(4)" die letzten beiden Zahlen ('2' und '4') ändern. Die zweite Zahl sollte dabei doppelt so groß sein, wie die erste, um den Strahl in beide Richtungen gleichmäßig zu verbreitern.
    3. im "motion_set"-Befehl bei dem Teil "10+random(3)" die Geschwindigkeit der "Feuerpartikel" einstellen. Je höher die Geschwindigkeit, desto "dünner" der Strahl.

    Create Event von obj_fire:

    1. "image_speed = 0.3+random(.4);" gibt an, wie schnell die Animation abgespielt wird.
    2. "alphaweg = .04+random(.025);" (ein Relikt aus Raphi's gmk ^^) steht für die Lebensdauer des Objekts.

    Step Event von obj_fire unter "// Size":

    1. die erste Zeile gibt an, wie lange von Beginn an ("if(image_alpha > .65)")und mit welcher Stärke ("scale = 5 + point_distance (x, y, obj_player.x, obj_player.y) / 65;") die Grafik größer werden soll. Es ist abhängig von der Distanz zum Spieler. Eine Alternative wäre, die Größe unabhängig davon kontinuierlich steigen zu lassen.
    2. die zweite Zeile sollte selbsterklärend sein.
    3. die letzten beiden Zeilen wählen zufällig einen Wert für die Größe, um die angesprochene Vibration auszuführen. Desweiteren wird das Sprite hier zufällig mittels negativer Werte für "image_xscale" und "image_yscale" gespiegelt. Ich gehe jetzt nicht ins Detail.

    Für einen insgesamt schöneren Feuerstrahl müssen auf jeden Fall die Sprites ersetzt werden. Die aktuellen sind zu klein. Das pixelige Ergebnis aufgrund der hohen Skalierung ist ja deutlich zu sehen.


    Oh man, soviel Text... 8|
    Dateien
    █████ ██ █ ████ everything ███ █████ is █████ ████ ████ fine ████ ███ █ ██████ love.
    █████ ███████ ███ your █████ ████ government.
  • Ok, ok, 25 Instanzen pro Step sind etwas viel, geb ich zu. Deine Version is eh viel besser mauge. Man kann halt selbst mit dem Lite Einiges anstellen, was?
    Anderer Leuten Signaturen sind... anderer Leuten Signaturen!


  • Raphi schrieb:

    Ok, ok, 25 Instanzen pro Step sind etwas viel, geb ich zu. Deine Version is eh viel besser mauge. Man kann halt selbst mit dem Lite Einiges anstellen, was?

    Definitiv. Das hätte ich vorher nicht geglaubt. Da sieht man auch mal, wie wertvoll "image_alpha" eigentlich ist und wie alltäglich die Verwendung für uns schon geworden ist. Ohne diese Möglichkeit hätte man sowas auf keinen Fall machen können. Der Versuch, die fehlenden Funktionen zu umgehen, hat schon einen gewissen Reiz, muss ich sagen. ^^
    Dass meine Version besser ist, würd ich so nicht sagen. Sie würde ohne deine gar nicht existieren und basiert eigentlich nur darauf. Die Hauptsache ist, dass stevey was damit anfangen kann.
    █████ ██ █ ████ everything ███ █████ is █████ ████ ████ fine ████ ███ █ ██████ love.
    █████ ███████ ███ your █████ ████ government.
  • Natürlich kann man. Schau mal ins Step Event von obj_player und ersetz folgende Zeile

    GML-Quellcode

    1. with (fire) {motion_set(point_direction(x,y,mouse_x,mouse_y)-2+random(4),10+random(3));}

    durch diese:

    GML-Quellcode

    1. with (fire) {motion_set(obj_player.dir-2+random(4),10+random(3));}
    █████ ██ █ ████ everything ███ █████ is █████ ████ ████ fine ████ ███ █ ██████ love.
    █████ ███████ ███ your █████ ████ government.
  • Benutzer online 1

    1 Besucher