Stotternde Flimmernde Grafik

    Stotternde Flimmernde Grafik

    Hey

    meine Spiele sind meist Pixelig gestaltet, sprich der Charakter ist meist 32x32 pixel groß, die anderen objekte sind dann darauf abgestimmt.
    Wenn ich das Spiel aber dann testen will fallen mir oft Grafische Fehler auf, Flimmern, Stotternde Animationen und meist deformieren sich die Sprites beim hin und her bewegen.
    In den Globalen Einstellungen habe ich -Start in Fullscreen- aktiviert.

    Meine Frage nun: An was genau liegt das? Mach ich etwas an der Auflösung falsch oder liegt der Fehler im Code?

    Wenn jemand eine Antwort oder einen Lösungsvorschlag hätte würde ich mich sehr freuen.
    Habe das ganze Internet schon durchsucht aber mir fehlt vermutlich einfach das Verständnis dafür wie Gamemaker meine Sprites behandelt.
    Ich weiss dieses "Problem" ist kein spezielles und ist alles eher Oberflächlich beschrieben doch vielleicht ist einem von euch schonmal so etwas
    aufgefallen und vlt habt ihr einen Vorschlag parat.

    Dankeschön und Liebe Grüße :)
    In den Global Game Settings kannst du "Interpolate Colors between pixels" unter dem Reiter Windows/Graphics einschalten. Wenn das Problem immer noch besteht und du mit Views arbeitest, dann den Roomspeed auf 60 erhöhen. Theoretisch sollte das Flimmern weg sein.
    Hey SmiaGOLD,

    danke erstmal für den Hinweis den Roomspeed erhöhen hat schon einiges gebracht und hat fast alle meine Grafische Haupt-Probleme behoben, danke !!

    Nun ist mir aber aufgefallen das das Ruckeln des Charakters immer dann auftritt wenn ich für speed / hspeed oder x+= (meinspeed) Kommazahlen benutze.
    Doch gerade Zahlen für die Geschwindigkeit machen den Charakter zu schnell ich hätte gerne das er sich langsamer bewegt. Sobald ich unter 1 in den Kommabereich
    gehe tritt ein ruckeln auf. Wüsste jemand wie ich dieses Problem beheben kann? I

    Danke
    Du musst die Sprites in dem Fall zB *10pixel malen. Dann machst du den view auch um 10 größer um das auszugleichen. Somit hast du eine größere Auflösung und ein speed von 3 pixeln würde 0.3 bei deinem jetzigen entsprechen, aber ohne ruckeln da es ganze Pixel sind.
    132 little bugs in the code. 132 little bugs. Fix a few, set the compiler to stew, 172 little bugs in the code... :vogel:
    Ein minimales ruckeln bei Pixelverschiebungen im Kommabereich lässt sich nicht vermeiden. Je niedriger die Auflösung desto mehr fällt das auf.
    Mit dern deformierten Sprites meinst du screen tearing? Dagegen hilft vsync bzw. "Use synchronization to avoid tearing" in [Global Game Settings->Windows->Graphics->Options].
    Kleine Ergänzung zu TrunX Beitrag:

    Der Effekt ist mir als „judder“ bekannt. Aufgrund der Geschwindigkeit (besonders im Fließkommabereich) bleiben die Pixel ein paar Frames zu lange unbewegt. Bei 1,3 Pixel pro Frame Geschwindigkeit muss die Animation immer etwas länger auf der vorherigen Position verweilen, da es keine halben pixel gibt.

    Die einzige Möglichkeit das effektiv zu umgehen, ist ganze Zahlen zu verwenden, oder zumindest gleichlange frames benutzen, damit es nicht so auffällt. (Das ist übrigens auch der Grund, warum manche 24fps videos beim Schwenk „zittern“.

    oder man kauft sich ein höher getaktetes Panel

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „domis4“ ()

    Hallo
    Erst nachdem ich dieses Thema verfolgt habe ist mir aufgefallen das auch bei mir ein "lag bzw. stottert meine Spielfigur gefühlt jede halbe Sekunde" zu erkennen ist.
    Ich denke es passt hier hinein daher möchte ich jetzt nicht xtra ein neues Thema dazu erstellen.
    Jetzt habe ich versucht auf 60 Frames zu stellen aber ohne Besserung.
    Auflösung ist 640x480 mit 30 Frames.
    Kann natürlich auch sein das mein in die Jahre gekommenes Notebook irgendwie nicht klar kommt.
    Daher wollte ich fragen ob sich jemand die Mühe macht und das "Spiel" bei sich probiert.
    Mit den Pfeiltasten steuert ihr Henry, Leertaste für Sprung, Ecape Taste zum beenden.
    Danke im voraus.
    workupload.com/file/jjyCMZX
    lg Vectorhead
    @Vectorhead Bei mir war die Framerate konstant (sah aber eher nach 30 aus), daher würd ich Framedrops ausschließen. Den Judder Effekt kann ich da ebenfalls nachvollziehen. Framedrop's kann man zumindest mit delta timing kompensieren.

    Ich vermute mal, dass die Nachkommastelle der vspeed keine gerade Zahl ist. Wenn ein Restwert entsteht wird immer ein Frame hinterherhinken, da es keine halben Pixel gibt. Ich bin mir ziemlich sicher, dass damit bereits der effekt deutlich reduziert oder gar nicht mehr bemerkbar ist. Die Beschleunigung wirst du übrigens auch anpassen müssen, denn immer wenn diese ungerade wird, gibt es judder.

    Das Video hatte ich schonmal im Screenshots Thread geposted. Man kann an den hin- und herschwingenden Menüelementen aber ebenfalls den Judder Effekt erkennen. Immer genau dann, wenn das Element beschleunigt oder abbremst:


    Grund hierfür sind ebenfalls ungerade Nachkommastellen. Genauer gesagt ist die Beschleunigung ziemlich dirty implementiert. Ich müsste sicherstellen, dass die Nachkommastelle immer gerade ist um judder zu vermeiden.
    Danke für deine Mühe.
    Mal sehen ob ich es hinbekomme.


    edit: Ich habe jetzt ein wenig rumprobiert und selbst wenn ich ein einfaches Objekt erstelle, diesem im Step Event

    GML-Quellcode

    1. hspeed=+2

    sage und in einem einfachen Raum mit 640x480 egal ob 30 oder 60 Frames platziere, merkt man dieses "judder" wie domis4 es nennt.
    Wie kann ich das jetzt ausgleichen bzw. geht das überhaupt und ist das nicht irgendwie ein Sch.... im Gamemaker oder bin ich einfach zu doof. :wacko:
    lg Vectorhead

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Vectorhead“ ()

    Neu

    Hey,

    vielen Dank an alle die hier ihre Ideen eingebracht.
    Ich habe viel ausprobiert und jetzt einfach mal wie Rahzul gesagt hat mein Spieler im Sprite Editor vergrößert.
    Nun ist die ganze Grafik zu erstellen etwas aufwendiger aber das ist es mir wert. Tatsächlich nehme ich kaum grafische
    Fehler wahr. Das "use Synchronisation to avoid teatering" habe ich zur sicherheit auch noch mit eingeschalten.

    Trotzdem Vielen Dank euch ^^

    Neu

    Schön das es klappt. Ist natürlich eine unschöne langwierige Aufgabe das in einem fertigen Spiel zu implementieren, aber beim nächsten Game denkst du dann GANZ SICHER dran^^
    132 little bugs in the code. 132 little bugs. Fix a few, set the compiler to stew, 172 little bugs in the code... :vogel:

    Neu

    Das vergrößern der Sprites ist nicht nötig und verschwendet nur Speicher. Wenn der Port on Screen ein vielfaches der Viewauflösung ist macht der GM das automatisch so, dass er die Sprites nicht in der Viewauflösung, sondern der Portauflösung subpixelweise verschiebt, bei Kommawerten.

    Finde ich persönlich eher schlecht, da es dadurch komplizierter wird pixelperfekte Spiele zu erstellen die nicht von Supixeln gebrauch machen, aber wenns deine favorisierte Darstellungsmöglichkeit ist kannst du davon Gebrauch machen.

    Neu

    Ja klar bei Pixelart kann man auch einfach mit image scale hochskalieren, bei anderen (natürlich nicht Vektor-) Grafiken macht es meiner Meinung Nach schon zu einem Gewissen Grad Sinn.
    132 little bugs in the code. 132 little bugs. Fix a few, set the compiler to stew, 172 little bugs in the code... :vogel: