Cara Melukis Grafik yang Sentiasa Berubah di Java
Melukis grafik yang sentiasa berubah-ubah boleh menjadi tugas yang mencabar di Java, terutamanya apabila menyasarkan animasi yang lancar dan kecekapan. Mari kita selami penyelesaian yang dipertingkatkan yang menangani isu prestasi yang diserlahkan dalam soalan asal:
Memisahkan Pengesanan dan Lukisan
Kod awal menggabungkan tugas mengesan warna piksel dan melukis grafik. Mengasingkan proses ini meningkatkan kecekapan.
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; //...
Mengambil Piksel Secara Pukal
Kod asal mendapatkan semula warna piksel satu demi satu. Dengan menggunakan robot.createScreenCapture(...), kami boleh mengambil kesemua 64 piksel sekaligus, mengurangkan overhed.
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)); //... } }
Keratan Pintar dan Benang
Hanya piksel yang ditukar hendaklah dilukis semula. Dengan menggunakan repaint() dengan koordinat tertentu, kami mengehadkan kemas kini kepada kawasan yang terjejas. Selain itu, memastikan semua kemas kini model dan paparan berlaku pada Benang Penghantaran Acara menghalang isu konkurensi.
SwingUtilities.invokeLater(new Runnable() { public void run() { view.setColorAt(finalX, finalY, pixelColor); } });
Kod yang dipertingkat mempamerkan faedah pengoptimuman ini, menghasilkan prestasi yang dipertingkatkan dengan ketara.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melukis Grafik yang Sentiasa Berubah di Java dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!