Khi thực hiện phát triển trò chơi 2D trong Java, hầu hết các hướng dẫn tạo ra một vùng đệm để hiển thị. Điều này làm cho cảm giác hoàn hảo. Tuy nhiên, nơi mọi người dường như nghiêng là phương pháp vẽ đồ họa thực tế vào bộ đệm.Đồ họa bộ đệm Java hoặc mảng số
Một số hướng dẫn tạo hình ảnh đệm, sau đó tạo một mảng số nguyên để biểu thị các màu pixel riêng lẻ.
private BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
private int[] pixels = ((DataBufferInt) image.getRaster().getDataBuffer()).getData();
Graphics g = bs.getDrawGraphics();
g.setColor(new Color(0x556B2F));
g.fillRect(0, 0, getWidth(), getHeight());
g.drawImage(image, 0, 0, getWidth(), getHeight(), null);
Tuy nhiên một số hướng dẫn khác không tạo hình ảnh đệm, vẽ thành phần đồ họa của BufferStrategy để vẽ hình ảnh trực tiếp vào bộ đệm.
Graphics g = bs.getDrawGraphics();
g.setColor(new Color(0x556B2F));
g.fillRect(0, 0, getWidth(), getHeight());
g.drawImage(testImage.image, x*128, y*128, 128, 128, null);
Tôi đã tự hỏi, tại sao tạo toàn bộ mảng int, sau đó vẽ nó. Điều này đòi hỏi rất nhiều công việc trong việc thực hiện hình chữ nhật, kéo dài, minh bạch, vv Các thành phần đồ họa của chiến lược đệm đã có phương pháp có thể dễ dàng được gọi. Có một số tăng hiệu năng lớn khi sử dụng mảng int không?
Tôi đã tra cứu điều này hàng giờ và tất cả các trang web tôi đã xem chỉ giải thích những gì họ đang làm và không phải lý do họ chọn làm theo cách đó.
Tôi không chắc chắn 100%, nhưng tôi sẽ xuất hiện một số người tin rằng sẽ nhanh hơn để cập nhật mảng int/pixel sau đó sử dụng API đồ họa. Điều này có thể đúng, cũng có khả năng mọi người không hiểu cách tạo các đối tượng đồ họa tương thích. Sử dụng một chiến lược đệm nên cung cấp hầu như truy cập trực tiếp đến lớp phần cứng (nếu có), vì vậy tôi không thực sự hiểu tại sao bạn cần xem tại sao bạn cần sử dụng mảng int, đó là tôi, và tôi lười biếng như vậy;) – MadProgrammer
Vâng, tôi đã thử nghiệm với cả hai phương pháp. Với mảng int, tôi có thể thay đổi khoảng 27648000 pixel trước khi khung hình/giây bắt đầu giảm xuống dưới 120. với đối tượng đồ họa, tôi có thể hiển thị hình ảnh trong suốt, lên hình chữ nhật có kích thước gấp vài nghìn lần tương đương với mảng int . Sử dụng đối tượng đồ họa có vẻ hữu ích hơn. – Kabistarz
Tôi đã làm một ví dụ tương đối đơn giản một số thời gian trước đây, sử dụng không có gì nhiều hơn sau đó một JPanel với một số bức tranh tùy chỉnh cho các đối tượng chính. Sau đó tôi nhận được 4500 của những vật thể này, tất cả đều di chuyển theo các hướng khác nhau, bao gồm cả vòng quay của vật thể chính để nó chỉ theo hướng chuyển động của nó. Không chắc chắn tỷ lệ khung hình thực sự là gì, nhưng tôi đã làm cho nó làm mới khoảng 25 khung hình/giây và nó hoạt động khá tốt. Tôi nghĩ rằng có rất nhiều tối ưu hóa trong đường dẫn dựng hình, với khả năng sử dụng DirectX hoặc OpenGL nếu có, nhưng bạn sẽ cần thử nghiệm;) – MadProgrammer