Heim > Java > javaLernprogramm > Hauptteil

Wie kann ich ständig wechselnde Grafiken in Java effizient zeichnen?

Mary-Kate Olsen
Freigeben: 2024-11-23 21:05:12
Original
549 Leute haben es durchsucht

How Can I Efficiently Draw Constantly Changing Graphics in Java?

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);
}
Nach dem Login kopieren
public void paintComponent(Graphics g) {
    if (!SwingUtilities.isEventDispatchThread()) {
        throw new RuntimeException("Repaint attempt is not on event dispatch thread");
    }
    final Graphics2D g2 = (Graphics2D) g;
    //...
Nach dem Login kopieren

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));
        //...
    }
}
Nach dem Login kopieren

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);
    }
});
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage