So zeichnen Sie sich ständig ändernde Grafiken in Java
Das Zeichnen sich ständig ändernder Grafiken kann in Java eine herausfordernde Aufgabe sein, insbesondere wenn es um flüssige Animationen geht und Effizienz. Lassen Sie uns in eine verbesserte Lösung eintauchen, die die in der ursprünglichen Frage hervorgehobenen Leistungsprobleme behebt:
Erkennung und Zeichnung trennen
Der ursprüngliche Code kombinierte die Aufgaben der Erkennung von Pixelfarben und Zeichnen der Grafiken. Die Trennung dieser Prozesse verbessert die Effizienz.
private void setColorAt(int x, int y, Color pixelColor) { model[x][y] = pixelColor; repaint(40 + x * STEP, 45 + y * STEP, 40 + (x * STEP) - 3, 45 + (y * STEP) - 3); }
public void paintComponent(Graphics g) { if (!SwingUtilities.isEventDispatchThread()) { throw new RuntimeException("Repaint attempt is not on event dispatch thread"); } final Graphics2D g2 = (Graphics2D) g; //...
Pixel in großen Mengen abrufen
Der ursprüngliche Code hat die Pixelfarben einzeln abgerufen. Durch die Verwendung von robot.createScreenCapture(...) können wir alle 64 Pixel auf einmal abrufen und so den Overhead reduzieren.
final BufferedImage capture = robot.createScreenCapture(rect); for (int x = 0; x < 8; x++) { for (int y = 0; y < 8; y++) { final Color pixelColor = new Color(capture.getRGB(x, y)); //... } }
Intelligentes Clipping und Threading
Nur die Geänderte Pixel sollten neu gezeichnet werden. Durch die Verwendung von repaint() mit bestimmten Koordinaten beschränken wir die Aktualisierung auf die betroffenen Bereiche. Darüber hinaus verhindert die Sicherstellung, dass alle Modell- und Ansichtsaktualisierungen im Event Dispatch Thread erfolgen, Parallelitätsprobleme.
SwingUtilities.invokeLater(new Runnable() { public void run() { view.setColorAt(finalX, finalY, pixelColor); } });
Der verbesserte Code zeigt die Vorteile dieser Optimierungen, was zu einer deutlich verbesserten Leistung führt.
Das obige ist der detaillierte Inhalt vonWie kann ich ständig wechselnde Grafiken in Java effizient zeichnen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!