Habe das noch nicht gemacht, also sauge ich offensichtlich daran. Hier werden 64 Pixel um die aktuelle Mausposition auf einem Formular etwas größer gezeichnet. Das Problem ist, dass es "irgendwie" langsam ist, und ich habe keine Ahnung, wo ich anfangen soll zu reparieren.
Außerdem habe ich einen Thread erstellt, der ständig aktualisierte Grafiken aufruft, wenn er fertig ist und ein paar fps wie Text, um wirklich zu zeigen, wie schnell die Dinge gezeichnet werden.
Bildbeispiel: (Bild stammt vom Buchstaben 'a' in Eclipse)
Codebeispiel:
%Vor% Änderungen vorgenommen:
* hinzugefügt "gc.dispose ();"
* hinzugefügt "Isdone", so konnte Redraw nicht schneller aufgerufen werden, dann sollte es
* hinzugefügt diesen Link zu thrashgod source rewrite
* hinzugefügt diesen Link zu thrashgod source rewrite 2
Hier ist meine Hauptumschreibung mit den folgenden bemerkenswerten Änderungen:
Der Ticker läuft ständig. Wenn es eine Änderung der Pixelfarbe erkennt (entweder aufgrund der Bewegung der Maus in eine andere Region oder der sich unter der Maus ändernden Pixel), erkennt es genau, was geändert wurde, aktualisiert das Modell und fordert dann die Anzeige auf, neu zu zeichnen. Dieser Ansatz wird sofort für das menschliche Auge aktualisiert. 289 Bildschirmaktualisierungen dauerten kumulativ 1 Sekunde.
Es war eine angenehme Herausforderung für einen ruhigen Samstagabend.
%Vor% Wenn es Ihnen nichts ausmacht, Swing zu verwenden, zeigt dieses Beispiel , wie Sie schnell ein BufferedImage
, das von einem erhalten wurde, heranzoomen können %Code%. In deinem Fall möchtest du ein 8x8 Icon
, das in BufferedImage
mit den Pixeln gefüllt wird, die der Roboter sieht.
Nachtrag: Hier sehen Sie eine Momentaufnahme der linken oberen Ecke Ihres Beispiels.
Nachtrag:
Das Zoomen selbst ist nicht wichtig ...
Der langsame Teil bezieht Pixel vom Desktop; Skalierung ist geringfügig. Wenn Sie nur eine Vielzahl von Animationstechniken sehen möchten, werfen Sie einen Blick auf dieses Beispiel .
Nachtrag: Da das Holen einzelner Pixel langsam ist und die von @ Steve McLeod vorgeschlagene mouseMoved()
Methode schnell ist, hier ist die Idee, die ich gefahren bin. Sie können sehen, dass es auch viel reibungsloser aktualisiert. Beachten Sie, dass durch das Loslassen der Maustaste die erfassten Farben angezeigt werden.
%Vor%
Fügen Sie diese Methode zur Paint-Methode hinzu:
%Vor%Okay, verwenden Sie den Timer, um die Verzögerung zu verlangsamen, nicht ein Threading, das ist schlecht.
Verwenden Sie einfach eine Zeitverzögerungsschleife. Sie können die Verzögerung dann feineinstellen, indem Sie die Grenzen von i einstellen. Sie können auch die Übergangsgeschwindigkeit durch einige Treffer und Versuche einstellen.
für (lange i = 0; i & lt; = 100000000000; i ++);
canvas.repaint ();
Es funktioniert sehr gut mit mir und auch keine Notwendigkeit, gepufferte Bilder zu verwenden.