我是游戏编程的相对新手。我知道如何将像素绘制到BufferedImage
using setPixel()
. 较大格式的速度非常慢,所以我继续前进并发现VolatileImage
(花了我一周左右的时间)。绘制线条、字符串、矩形等相当容易,但我无法绘制单个像素。我已经尝试过使用drawLine(x,y,x,y)
,但我在 800x600 图像上获得 3-4 FPS。java 没有包含setPixel()
或包含setRGB()
在其中的事实VolatileImage
让我非常生气和困惑。
我有4个问题:
有没有办法在 VolatileImage 上绘制单个像素?(在 FPS > 40 的 1440x900 格式上)
我可以用更快的方法在 BufferedImage 中绘制像素吗?(相同的 1440x900,FPS > 40)
有没有其他方法可以为 3D 游戏快速绘制像素?
我可以让我的 BufferedImage 硬件加速吗(尝试使用
setAccelerationPriority(1F)
但它不起作用)
如果您有任何想法,请告诉我。没有这些信息,我无法继续制作我的游戏。我已经制作了 3D 渲染算法,但我需要能够绘制快速像素。我对这个游戏有很好的感觉。
如果它可以帮助你帮助我,这是代码:
public static void drawImageRendered (int x, int y, int w, int h) { // This is just a method to test the performance
int a[] = new int[3]; // The array containing R, G and B value for each pixel
bImg = Launcher.contObj.getGraphicsConfiguration().createCompatibleImage(800, 600); // Creates a compatible image for the JPanel object i am working with (800x600)
bImg.setAccelerationPriority(1F); // I am trying to get this image accelerated
WritableRaster wr = bImg.getRaster(); // The image's writable raster
for (int i = 0; i < bImg.getWidth(); i++) {
for (int j = 0; j < bImg.getHeight(); j++) {
a[0] = i % 256;
a[2] = j % 256;
a[1] = (j * i) % 256;
wr.setPixel(i, j, a); // Sets the pixels (You get a nice pattern)
}
}
g.drawImage(bImg, x, y, w, h, null);
}
我宁愿不使用OpenGL或任何其他外部库,只使用普通的 Java。