Objekt kurz aufblinken lassen

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

  • Objekt kurz aufblinken lassen

    So mal so eine kurze Frage a là wie würdest es Du machen? Ich will damit Lösungsansätze finden, meinen Workflow anregen und Ideen sammeln :)

    Wie würdet ihr ein Objekt, sagen wir ein Gegner den ihr mit einer Kugel getroffen hat, kurz aufblinken (bzw. Farbe ändern c_red) lassen mit image_blend und dann wieder in den Normalzustand (c_white) versetzten.
    • Meine Idee war einen Alarm zu erstellen, welche dann jedesmal wieder ausführt image_blend = c_white;

      Meine Frage dazu: Was für Möglichkeiten gäbe da noch, anstelle eines Alarms? :?:


    huhu
  • Hi
    Ich habe um ein Objekt blinken zu lassen, eine Animattion mit einer Blinkphase erstellt. Das ist zwar etwas umständlich, aber so kann ich entscheiden was den nun blinken soll. Entweder nur eine bestimmte Farbe oder alles.
    Und mit dem Alarm-Event bestimme ich dann die Blinkdauer.

    Gruss Drachen
  • Kollisionsevent mit Gegner:

    GML-Quellcode

    1. if other.blink==0
    2. other.blink=1;



    Create-Event Gegner:

    GML-Quellcode

    1. blink=0;
    2. blink_alpha=0;
    3. blink_speed=0.1;


    Step-Event Gegner:

    GML-Quellcode

    1. if blink
    2. {
    3. if blink_alpha<1
    4. {
    5. blink_alpha+=blink_speed;
    6. }
    7. else
    8. {
    9. blink_alpha=1-blink_speed;
    10. blink_speed*=-1;
    11. }
    12. if blink_alpha<0
    13. {
    14. blink_speed*=-1;
    15. blink_alpha=0;
    16. blink=0;
    17. }
    18. }
    Alles anzeigen


    Der blink_alpha Wert sollte jetzt einmal zwischen 0 und 1 hin und her schwanken.
    Am besten sieht es vermutlich mit einem Shader-Effekt aus, der den Sprite komplett einfarbig rot einfärbt.

    Bei image_blend müsste man etwas in die Richtung machen (Step):

    GML-Quellcode

    1. image_blend=make_colour_rgb(255,255-(255*blink_alpha),255-(255*blink_alpha))


    Alternativ einfach nur kurz transparent werden lassen:

    GML-Quellcode

    1. image_alpha=1-blink_alpha;


    Ist jetzt alles spontan geschrieben worden ohne im GM getestet worden zu sein.
  • Ich würde eine variable zwischen 0 und 1 oder 0 und 4 durchzählen und dann zB immer bei 1 auf red wechseln lassen.

    GML-Quellcode

    1. blink != blink;
    2. if blink == 1
    3. {
    4. colour = c_red;
    5. }
    6. else
    7. {
    8. colour = c_white;
    9. }

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
  • Oder gaaanz kompliziert und alles in eine Zeile packen (kompatibel mit image_speed):

    GML-Quellcode

    1. ​image_blend = ((c_red)*(image_index mod 2) + (c_white)*(!(image_index mod 2)));

    Code ist nicht getestet
    Ist wahrscheinlich extrem umständlich und keiner kapierts xD

    Aber warum nicht und zeigen wie es auch anders geht ;)
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe
  • Ich würde es so lösen :

    GML-Quellcode

    1. //Create
    2. col = c_red; //blendfarbe
    3. tm = 0;
    4. tm_max = room_speed; //dauer
    5. tmod = 1; //auf oder absteigend
    6. //Draw
    7. draw_self();
    8. if (tm >= 0) {
    9. draw_set_alpha(tm/tm_max);
    10. d3d_set_fog(true,col,0,0); //oder mit blend modes arbeiten
    11. draw_self();
    12. d3d_set_fog(false,c_black,0,0);
    13. draw_set_alpha(1);
    14. if (tm >= tm_max)
    15. tmod *= -1;
    16. tm += tmod;
    17. }
    Alles anzeigen


    zum aufblinken muss lediglich tm =0 gesetzt werden, es stoppt dann bei -1
    132 little bugs in the code. 132 little bugs. Fix a few, set the compiler to stew, 172 little bugs in the code... :vogel:
  • Ich komm da etwas spät mit meiner Message - aber danke für die verschiedenen Ideen. Sehr kreativ!

    Aber....

    Husi012 schrieb:

    Oder gaaanz kompliziert und alles in eine Zeile packen (kompatibel mit image_speed):

    GML-Quellcode

    1. ​image_blend = ((c_red)*(image_index mod 2) + (c_white)*(!(image_index mod 2)));

    Code ist nicht getestet
    Ist wahrscheinlich extrem umständlich und keiner kapierts xD

    Aber warum nicht und zeigen wie es auch anders geht ;)

    Ich kapier's echt nicht 8o kenne die Funktion mod auch garnicht.
    Kannst Du mir das bitte in kürze erklären, was in diesem Code abgeht. :deal:

    :thumbsup:
    huhu
  • mod gibt dir den rest einer division zurück.

    GML-Quellcode

    1. image_index mod 2

    gibt dir also immer 0 zurück wenn das subimage deiner animation gerade ist. Jedes zweite Bild blinkt dann rot auf.

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
  • Du kannst auch eine Variable von 0 zu 1 und wieder zu 0 wechseln lassen statt die subimages zu verwenden.

    GML-Quellcode

    1. anim += 1
    2. if anim > 1
    3. {
    4. anim = 0;
    5. }

    dann brauchst du auch kein modulo

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)