Rumah > Java > javaTutorial > Bagaimanakah Saya Boleh Melukis Grafik yang Sentiasa Berubah di Java dengan Cekap?

Bagaimanakah Saya Boleh Melukis Grafik yang Sentiasa Berubah di Java dengan Cekap?

Mary-Kate Olsen
Lepaskan: 2024-11-23 21:05:12
asal
630 orang telah melayarinya

How Can I Efficiently Draw Constantly Changing Graphics in Java?

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

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));
        //...
    }
}
Salin selepas log masuk

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);
    }
});
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan