Sprite "blitzt" auf bevor es hinter dem Transparenten "Vorhang" verschwindet

  • GM 8

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

  • Sprite "blitzt" auf bevor es hinter dem Transparenten "Vorhang" verschwindet

    Hallihallo,

    ich habe ein sehr merkwürdigen Problem.
    Ich benutze ein halb-transparentes schwarzes Rechteck als "Nacht".
    Wenn ich nun "nachts" Animationen darstelle dann kommt der erste Frame immer vor dem schwarzen Rechteck, ist also viel zu hell.
    Alle nachfolgenden Frames erscheinen normal hinter dem Rechteck.

    Ich habe versucht den Versuchsaufbau in einem neuen Projekt nachzubauen ober dort funktioniert alles wie es soll.
    Also dachte ich: "Naja vielleicht braucht der GM einfach zu lange zwischen den draw-events von meiner Animation und der "Nacht"."
    Deshalb habe ich mein großes Projekt immer weiter abgespeckt bis nur noch die Kernelemente da waren:
    Nacht Objekt
    Controler Objekt
    Animationsobjekt.

    Und das Problem tritt immer noch auf.
    Das ist mir irgendwie zu hoch.

    Ich habe das abgespeckte Projekt mal angehängt vielleicht werdet ihr ja schlau draus.
    Da das ganze im GM8.1 ist (und viele noch <=8.0 verwenden) hier mal der Haupcode:
    Spoiler anzeigen

    Das ist das Nacht-Objekt

    GML-Quellcode

    1. Information about object: object_night
    2. Sprite:
    3. Solid: false
    4. Visible: true
    5. Depth: -1000
    6. Persistent: false
    7. Parent:
    8. Mask:
    9. Draw Event:
    10. execute code:
    11. draw_set_color(c_black) // wir färben das Rechteck Schwarz
    12. draw_set_alpha(0.7) // der Alphawert entspricht global.alpha (vorher im Step Event von "Controller" definiert
    13. draw_rectangle(0,0,room_width,room_height,0) //und drawen das Rechteck schließlich über den gaaaaaanzen Raum
    Alles anzeigen

    Das Controler Objekt:

    GML-Quellcode

    1. Information about object: object_activate
    2. Sprite:
    3. Solid: false
    4. Visible: true
    5. Depth: -200
    6. Persistent: false
    7. Parent:
    8. Mask:
    9. Create Event:
    10. set variable b_use to 0
    11. Draw Event:
    12. execute code:
    13. if (b_use == true)
    14. {
    15. Use();
    16. b_use = false;
    17. }
    18. Key Press Event for Key:
    19. set variable b_use to 1
    Alles anzeigen

    Das Animations-Objekt

    GML-Quellcode

    1. Information about object: object_use
    2. Sprite: anim_can_horizontal
    3. Solid: false
    4. Visible: true
    5. Depth: -201
    6. Persistent: false
    7. Parent:
    8. Mask:
    9. Other Event: Animation End:
    10. destroy the instance
    Alles anzeigen


    und das Skript "use()"

    GML-Quellcode

    1. new_id = instance_create(x,y,object_use);
    2. new_id.sprite_index = anim_can_horizontal;
    3. new_id.image_speed = 0.5;



    Vielen Dank im vorraus falls ihr bis hierher gelesen habt ;)
    Dateien
    • night_test_2.zip

      (12,06 kB, 337 mal heruntergeladen, zuletzt: )
  • Im object_activate führst du im DRAW EVENT das Script USE aus. Das verursacht das Problem! Stells mal auf STEP EVENT um und alles funzt.

    Zudem könntest du dir mal überlegen das ganze vielleicht etwas zusammenzufassen bzw. übersichtlicher zu gestalten.

    Greetz BM
    Es gibt viel zu tun, packen wir´s an !!!
    Für Rechtschreibfehler sind die verantwortlich, die sie entdecken :P.
  • Danke das hat sehr geholfen, jetzt meine Frage, warum?
    Was genau passiert da?
    Ursprünglich wurde dort im Use(), skript direkt gezeichnet daher musste das ins draw-event.
    Mitlerweile ist das Zeichnen ausgelagert in eigene controler objekte.

    Zum Thema Zusammenfassen:
    Das ganze ist Teil eines größeren Projektes, und da macht es meiner Meinung nach durchaus Sinn zu modularisieren.
    Auch wenn es mit der Übersichtlichkeit beim GM nicht so weit her ist.
  • Eine Instanz wird unmittelbar nach ihrer erschaffung gezeichnet (nachdem das Create-Event der Instanz durchlaufen ist)
    Das heißt object_use wird, von object_activate, welches vor object_night abgearbeitet wird, erzeugt und unmittelbar gezeichnet. für weniger als einem Step ist damit object_use auf dem schwarzen Rechteck von object_night gezeichnet, welches noch von einem vorherigen Step dort ist. Das nun, im selben Step, aufgerufene Draw-Event von object_night wird ein schwarzes Rechteck drüber zeichnen. Deswegen dein kleines Flimmern.

    Es Flimmert in den weiteren Steps nicht mehr, da der Game Maker erst (afaik) alle Veränderungen registriert und dann als "ganzes" (wie ein geschossenes Bild, nbatürlich nicht wörtlich) zeichnet. Somit ist object_use dann immer unter dem später gezeichneten Rechteck.

    MfG.,
    Mokuyobi
    木曜日 (Mokuyōbi)

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