Harte Pixel

    • Skript

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



    • Macht ihr zur Zeit ein niedrigauflösendes Spiel und seid von gamemakers weichzeichnerei genervt?
      Wollt ihr stattdessen lieber knusprige Pixel sehen?

      Dann benutzt einfach diese Scriptsammlung HIER.
      MIRROR
      Pfeiltasten: view bewegen.
      T: vergrösserung ein/ausschalten.
      Space: Pause

      Das Beispiel bläht ein 80x80 Spiel zu 400x400 auf, ohne dabei alles in einen unansehnlichen Brei zu verwandeln.
      Wenn ihr den direkten Unterschied sehen wollt, drückt f4 für Vollbild und dann mehrmals space.

      Theoretisch lässt sich das nachrtträglich in jedes Spiel einbauen, das das automatische zeichnen nicht deaktiviert.

      WICHTIG!
      "Use synchronization to avoid tearing" unbedingt abgeschaltet lassen! Sonst wird das Spiel stark ausgebremst!

      scr_resize_init(w,h): Initialisiert das System. Weite und Höhe des views müssen angegeben werden.
      scr_resize_init_gm7(w,h): Wenn ihr gamemaker 7 benutzt, müsst ihr diesen Skript zum initialisieren verwenden!

      scr_room_goto_resize(room,w,h,wport,hport): Wichtigster script. Immer anstelle von room_goto() verwenden! w und h sind die breite und höhe des views, wport und hport ist die Breite und Höhe des Fensters.

      scr_toggle_resize(w,h): Schaltet die Vergrösserung an und ab. Danach immer direkt scr_room_goto_resize() ausführen, sonst kann es zu Grafikfehlern kommen!

      scr_screen_redraw(): Anstelle von screen_redraw verwenden, wenn man es verwendet!
      scr_resize_start_drawing()/scr_resize_stop_drawing(): Für das Zeichnen während das Spiel mit while-loops eingefrotren wurde (Pause-skripte). Sobald man anfängt etwas zu zeichnen, scr_resize_start_drawing() ausführen, ist man fertig scr_resize_stop_drawing() ausführen.
      NIEMALS scr_screen_redraw() ausführen, nachdem scr_resize_start_drawing() ausgeführt wurde, vorher machen sonst kommt es zu Grafikfehlern!

      scr_texture_set_interpolation(interpolation): Anstelle von texture_set_interpolation() verwenden!
      Damit kann man 'interpolate colors between pixels' an- und ausschalten ohne das die Vergrösserung interpoliert wird.
      Standardmässig ist das abgeschaltet.

      Dieser Beitrag wurde bereits 9 mal editiert, zuletzt von Verwurster ()

    • Sieht gut aus, wie sieht das ganze aber Performance mäßig aus? Ich hab auch mal ein Blur Example mit Surfaces bei einem Spiel verwendet, war allerdings mega performance schluckend ;)
      Ich kenn da noch einen kleinen Trick um einen ähnlichen Effekt zu erzielen:

      Global Game Settings: Start in Full-screenmode=Ein Keep Aspect Radio=Ein
      1024x768 Resolution (zum Besipiel)

      Room Properties:
      Enable the use of Views=Ein Visible when room starts:Ein
      View in Room: W=800 H=600 Port on Screen: W=800 H=600 (zum Beispiel)


      Damit bekommt man zwar nicht so einen extremen Blur Effekt, aber dafür ist die Methode auch sehr Performance sparend.
    • Performancemässig sollte das kaum reinhauen, das das nur den view auf eine Surface überträgt und die Surface dann vergrössert auf den Bildschirm zeichnet.

      Wenn du den viewport dafür missbrauchst, kommen aber hässliche Grafikfehler wenn du tiles verwendest und den view bewegst. (Beispiel hier)
      Ausserdem sind einige Pixelreihen manchmal nur 1 pixel statt 2 pixel breit, was nicht gut aussieht.
      Wenn du Dinge wie draw_circle verwendest, werden die zu allem Überfluss noch in der hohen Viewportauflösung gezeichnet, was nicht gut aussiehtm, da 2 Auflösungen gemischt werden.
      Gm macht es einem da wirklich nicht leicht...

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

    • Hast du space gedrückt?
      Wie gross ist das Fenster?
      Zeig mal einen screenshot.

      Edit: bah, mit so wenigen Infos kann ich nichts anfangen.
      Habe jetzt mal gm7 installiert (nachdem ich meinen Spass mit softwrap hattte =P) und den Fehler behoben.
      Siehe erste post.

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

    • Verwurster schrieb:

      Wenn du den viewport dafür missbrauchst, kommen aber hässliche Grafikfehler wenn du tiles verwendest und den view bewegst. (Beispiel hier)
      Ausserdem sind einige Pixelreihen manchmal nur 1 pixel statt 2 pixel breit, was nicht gut aussieht.
      Wenn du Dinge wie draw_circle verwendest, werden die zu allem Überfluss noch in der hohen Viewportauflösung gezeichnet, was nicht gut aussiehtm, da 2 Auflösungen gemischt werden.
      Gm macht es einem da wirklich nicht leicht...
      Das Problem mit dem Viewport ist mir auch aufgefallen, ich habe diese Grafikfehler aber nicht wenn ich den Viewport um genau 1 verringere.

      Also z.B.


      Kann das wer bestätigen? Bei mir funktioniert das wie gesagt einwandfrei :x

      Dann hab ich da eben noch folgende Seite gefunden, da wird eine ähnliche Lösung beschrieben, bei mir funktioniert sie, ist aber deutlich langsamer als meine Viewport Lösung:
      clicky click

      Edit: Getestet nur mit GM6
    • Ah, wenn man das um 1 pixel verringert, sieht das bei 2facher Vergrösserung nicht mehr so schlimm aus.

      Ändert aber nichts daran, das Dinge wie draw_circle mit aufgeblasenem Viewport nicht wirklich gut aussehen, da die die Auflösung vom viewport verwenden.
      Das Ding von tigsource ist in etwa das, was ich auch mache. Ist ja auch keine grundsätzlich neue Idee, da surfaces zu verwenden.
      Mein System erfordert jedoch keinerlei Extraarbeit, da man die Viewports und das Controllerobjekt nicht manuell vorbereiten muss was einem schon viel Arbeit erspart, wenn man das nachträglich in ein grosses, schon fertiges Spiel einbaut.

      Klar ist das übrigens schneller, allse einfach nur den viewport hochzusetzen, da ja immer die Surface mitgezeichnet werden muss.
      Wenn's funktioniert, sollte man es auch so machen.
      Wenn nicht, funktioniert es jedoch immer mit surfaces.

      Ist aber eh egal, denn die Spiele, die davon profitieren haben eine so niedrige Auflösung, das das nicht viel machen sollte.

      Edit: Dämliches Zeitlimit -.-

      Update

      Neu:
      -Ein init Script für gm7, damit das unkompliziert auch in gamemaker 7 funktioniert.
      -Scripte für das Zeichnen innerhalb von while-loops
      -Script zur Kontrolle von texture_set_interpolation.

      Der erste Post wurde mit weiteren Infos und einem neuen Download Link upgedatet.

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Verwurster ()

    • Forbidden
      You don't have permission to access /files3/2950724/screenresizing.zip on this server.

      Leider funktioniert bei mir der Link nicht. Würde die Sache gern ausprobieren, da mich die verwaschenen Pixel in meinem aktuellen Projekt doch sehr stören...
      Einige meiner Spiele:
    • Danke.
      Leider bricht bei mir die Leistung recht stark ein, das Spiel läuft nur noch mit 28 fps anstelle der 60 vorher (160x128, 4fach vergrößert). Deshalb werde ich wohl mit der hässlichen Interpolation vorlieb nehmen müssen.
      Einige meiner Spiele:
    • Ich hab da grad noch was nicht ganz unwichtiges herausgefunden was dir helfen könnte:

      Die Option "Use synchronization to avoid tearing" sollte man unbedingt ausgeschaltet lassen da das Spiel sonst ganz fies langsam wird.

      Hab mich vorhin nämlich gewundert, warum die Scripts in einem Projekt unglaublich langsam sind und in nem anderen Projekt keinerlei Probleme machen :)
    • Oh? Stimmt!
      Ich habs eh nie an.
      Ausserdem habe ich auch keinerlei tearing Probleme so lange die Vergrösserung aktiv ist, was im normalen Modus überhaupt nicht der Fall ist.
      Kann das jemand bestätigen? Habt ihr auch nach der Vergrösserung noch tearing?

      Edit: Habe wohl falsch geguckt, da ist nach wie vor ein wenig Tearing.
      Damit muss man dann wohl leben... es sei denn mir fällt da was ein.

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Verwurster ()

    • Mh ja ab und zu kommts bei mir auch zu Tearing, egal ob ich mit oder ohne Vergrößerung arbeite.
      Ich weiß nicht wie genau der GM das regelt und wie viel da über die GPU läuft, aber ich hab nur nen Einkernprozessor und ein GM Spiel braucht wenn ich mich nicht täusche min. 12 Threads, kann also sein, dass das nur meinem PC nicht auf die Reihe bekommt :x
    • Ah, vielen Dank für den Tipp.
      Da mein Spiel Instanzen außerhalb des Views deaktiviert, hatte ich Probleme und kam erst nach Einsehen der Skripte darauf, dass dort ein Objekt erzeugt wird, das ich natürlich immer wieder aktivieren muss.

      GML-Quellcode

      1. instance_activate_object(global.screencontroller);

      Nun funktioniert's perfekt:
      Einige meiner Spiele:
    • Hm, eigentlich habe ich extra für die Deaktivierung von Instanzen ausserhalb des views dafür gesorgt, das das controller Objekt einen Sprite hat (wenn's keinen hat kann's nie mehr aktiviert werden) und bei jedem step x und y = view_xview/view_yview setzt so das es den view theoretisch nie verlässt... komisch.
      Muss ich wohl noch einen Skript, der das Objekt aktiviert hinzufügen.

      Freut mich aber mal, das ich nicht der einzige bin der das verwendet ;)