Hello, Guest the thread was viewed217k times and contains 1747 replies

last post from Endlosschleife at the

Heute so gecodet...

  • Da hat drazil was angerichtet. Der Bug ist eine größere Kopfnuss als ich dachte. :)


    Da werde ich nach dem Aufstehen mit Stift und Papier bewaffnet einen neuen Versuch unternehmen dem Fehler auf die Spur zu kommen. :search:

  • Da hat drazil was angerichtet. Der Bug ist eine größere Kopfnuss als ich dachte. :)


    Da werde ich nach dem Aufstehen mit Stift und Papier bewaffnet einen neuen Versuch unternehmen dem Fehler auf die Spur zu kommen. :search:

    I'm so sorry. Ist aber wirklich ein schönes Projekt.

  • I'm so sorry. Ist aber wirklich ein schönes Projekt.

    Das mit dem „angerichtet“ war natürlich nicht ernst gemeint. :)


    Und Du hast Recht, ein schönes Projekt welches mir besonders in den letzten Wochen viel Freude bereitet hatte. 8o


    Nachtrag:

    Da hatte ich bis in die Nacht an dem Bug gesessen und war mit der Erkenntnis ins Bett gegangen, das bisherige Versuche das Problem nicht lösen konnten.

    Jetzt sitzte ich wieder an dem Problem und stelle fest das ich den Fehler so nicht mehr reproduzieren kann. 8|

    Hat sich über Nacht wohl selbst wegprogrammiert. :D

  • Und wieder ein Update meines "Special Interest"-Projekts zur Anzeige von (durch spezielle Kommentare) strukturiertem Quellcode.



    Ich habe meine beiden Hauptprobleme gelöst und weitere Features eingebaut:

    • Es läuft jetzt nur eine Instanz. Wird das JAR mit anderen Parametern gestartet, werden sie an die erste Instanz weitergereicht. Mache ich per unique4j.
    • Es wird jetzt nur noch der notwendige Ausschnitt gerendert, was den Speicherbedarf dramatisch reduziert und auch das Laden/Anzeigen entsprechender Dateien massiv beschleunigt.
    • Es gibt nur noch ein Hauptfenster. Die Konsole ist per JSplitPane unten angehängt und neue Fenster werden als JTabbedPane angezeigt
    • Auf den Tabs gibt es ein Popup-Menü zum Schließen, Rauskopieren des Dateinamens usw.
    • Man kann jetzt auch Worte per Doppelklick markieren und dann per Ctrl-C in die Zwischenablage kopieren.
    • Man kann per Ctrl-F in der Datei suchen (vorwärts, rückwärts, nur Worte, Groß-/Kleinschreibung ignorieren)
    • Spaces und Tabs werden als graue Sonderzeichen (mittige Punkte und Doppelpfeil, ähnlich wie im Eclipse-Editor) dargestellt.

    In der Form ist der Viewer bereits einigermaßen einsetzbar. Es fehlen aber noch ein paar Sachen wie das freie Markieren/Kopieren von Text und Komfortfeatures wie das Markieren passender Klammern oder das Markieren aller gleichen Worte, wenn man eins markiert hat usw.


    Es gibt auch noch ein paar kleinere Probleme. Beim Umschalten zwischen den Tabs wird der Quelltext zuerst eine Zeile zu noch und eine Zeile zu kurz angezeigt (sieht man auch oben im Bild). Erst wenn man mit der Maus drüberfährt, springt die Anzeige auf die korrekte Darstellung um.


    [EDIT]

    Oh, das letztere Problem konnte ich mit einer Zeile korrigieren:

    Code
    1. scrollPane.getViewport().setScrollMode(JViewport.BACKINGSTORE_SCROLL_MODE);

    Muß man jetzt nicht unbedingt verstehen, aber jetzt scheint es zu tun wie erwartet.

  • Und weiter geht's.

    • Es gibt jetzt ein Hauptmenü zum Laden, erneuten Laden bei Änderungen, Schließen aller Dateien, Liste der letzten Dateien, Ein- und Ausblenden der Konsole
    • Es gibt jetzt auch ein Popup-Menü zum Kopieren von Text und zum Starten externer Editoren mit Übergabe der aktuellen Zeile. Brauchte Extraarbeit um den doppelten Mausklick rechts zu erhalten.
    • Die Suche funktioniert jetzt korrekt. Man kann auch mehrere Stellen in der gleichen Zeile finden und die gefundenen Stellen werden markiert.
    • Bei einem Doppelklick auf ein Wort werden alle gleichen Worte in der aktuellen Ansicht markiert. Das funktioniert auch in komplexen Situation (Zeilenumbruch, Tabs usw.)
    • Beim Skalieren des Fensters wird die Darstellung automatisch an die Breite angepaßt. Mit Timer zur Verzögerung, um einen Overkill bei großen Textblöcken zu vermeiden.
    • Bei automatischen Zeilenumbrüchen werden Tabs richtig(er) behandelt.
    • Das Syntax-Highlighting von Präprozessor-Anweisungen wie "#define" entspricht jetzt dem in Notepad++ und berücksichtigt Zeilenumbrüche mit Backslash.
      Wobei ich gerade im Screenshot sehe, daß der Backslash selber die falsche Farbe hat (*sigh*)

    Es fehlen jetzt eigentlich nur noch ein paar Kleinigkeiten wie die automatische Markierung von Klammern und das Kopieren von Blöcken oder der ganzen Ansicht in die Zwischenablage.

    Ich bin auch noch nicht 100% zufrieden mit dem Mechanismus zum freien Markieren von Text. Eigentlich sollte der auch leere Zeichen hinter dem Zeilenende und Tabs berücksichtigen. Aber es geht auch so.



    Aber dann bin ich wieder in eine Wand gerannt. Ich hatte ja früher schon geschrieben, daß mir das DPI-Scaling große Probleme bereitet hat und das es ein merkwürdiges Problem mit dem Hoch- und Runterspringen der Anzeige gab, was ich über Setzen des BACKINGSTORE_SCROLL_MODE beseitigt zu haben dachte.

    Leider zeigten sich im praktischen Einsatz merkwürdige Artefakte beim Scrollen. Teils waren weiße Linien zu sehen, teils waren gerade Linien aus meinem korrekt gezeichneten BufferedImage "ausgefranst", also mal um einen Pixel nach oben oder unten versetzt. Ich kann nicht wirklich sagen, woran das genau lag, aber es hing eindeutig mit dem BACKINGSTORE_SCROLL_MODE zusammen, also mußte ich den wieder deaktivieren. Und sofort hatte ich wieder das Problem, daß die Anzeige hoch- und runtergesprungen ist. Es war inzwischen sogar schlimmer geworden. Ich konnte das zwar dahingehend "verbessern", daß das Springen weg war, aber dafür haben dann immer die ersten paar Zeilen Text gefehlt. Nach langen Debugging-Sitzungen und vielen Experimenten bin ich zu der Erkenntnis gelangt, daß die Anzeige um genau 60 Pixel verschoben ist. Aus der Tatsache, daß der Y-Offset größer geworden ist, seitdem ich TabbedPane und Menü eingeführt habe und gleichzeitig der X-Offset immer noch unauffällig war, kam ich auf die Idee, daß die 60 Pixel sich irgendwie aus dem Offset des ViewPorts zum Hauptfenster ergeben. Allerdings ergab sich damit nur ein Wert von 48 Pixeln. Mit meiner DPI-Skalierung von 1.25 wurden dabei auf wundersame Weise aber genau die gesuchten 60 Pixel.

    Das hat mich dann nach einigen Fehlschlägen wieder auf die affine Abbildung gebracht, die mir das Leben wegen der DPI-Skalierung schwer gemacht hatte. Und siehe da: in der ursprünglichen Version war nicht nur die Skalierung enthalten, sondern auch die Verschiebung des ViewPorts:

    Code
    1. AffineTransform[[1.25, 0.0, 1.0], [0.0, 1.25, 60.5]]

    Als ich diese affine Abbildung überschrieben habe, um die Skalierung um den Faktor 1.25 zu vermeiden, habe ich auch die Verschiebung ausgeknockt. Tatsächlich sogar die gesamte Verschiebung des Viewports.

    Das erklärt auch ein anderes Phänomen, daß ich nicht wirklich verstanden, aber halt irgendwie hingenommen hatte: ich hatte irgendwie erwartet, daß ich den sichtbaren Ausschnitt in meinem JPanel trotzdem an den richtigen Koordinaten zeichnen muß. Stattdessen mußte ich aber quasi alles ab Offset (0,0) zeichnen und z.B. von der tatsächlichen Y-Position im Panel die Y-Position des sichtbaren Ausschnitts abziehen. Das war aber nur ein Resultat daraus, daß ich die affine Abbildung wegen der DPI-Problematik überschrieben hatte.

    Hoffen wir mal, daß ich dieses Problem jetzt endgültig behoben habe.


    [EDIT]

    Auch wenn es "Special Interest" ist, habe ich den Status jetzt mal in ein Repository eingespielt und eine Website erstellt.

  • Ich arbeite ja zur Zeit an einem neuen Spiel, und habe dafuer auch vor einiger Zeit einen Leveleditor angefertigt in Python. Dort habe ich gestern bei unserem "42. Spieleentwicklertreffen" (https://spieleentwicklung-bodensee.de/) weitergemacht und ein paar coole Zeichenfunktionen eingebaut, mit denen das Levelbauen jetzt richtig viel Spass macht. Natuerlich kann ich dazu noch nichts zeigen, denn dann wuerde man ja was vom Spiel sehen ;)


    Aber ich freue mich schon, sofern das Spiel dann mal eines Tages fertig wird, auch ueber den Entwicklungsprozess zu sprechen und ein paar der internen Tools vorzufuehren :D

  • Ich arbeite ja zur Zeit an einem neuen Spiel, und habe dafuer auch vor einiger Zeit einen Leveleditor angefertigt in Python. Dort habe ich gestern bei unserem "42. Spieleentwicklertreffen" (https://spieleentwicklung-bodensee.de/) weitergemacht und ein paar coole Zeichenfunktionen eingebaut, mit denen das Levelbauen jetzt richtig viel Spass macht. Natuerlich kann ich dazu noch nichts zeigen, denn dann wuerde man ja was vom Spiel sehen ;)


    Aber ich freue mich schon, sofern das Spiel dann mal eines Tages fertig wird, auch ueber den Entwicklungsprozess zu sprechen und ein paar der internen Tools vorzufuehren :D

    Klasse, da freue ich mich auf das Spiel und auf das Making-of!