高效地渲染大量单个像素?

Render lots of individual pixels efficient?

我在游戏中加载的图像上制作了地图,如下所示:

List<Block> tempBlocks = new ArrayList<Block>();
BufferedImage level = levels.get(currentLevel);
for (int x = 0; x < level.getWidth(); x++) {
    for (int y = 0; y < level.getHeight(); y++) {
        tempBlocks.add(new Block(x, y, new Color(level.getRGB(x, y))));
    }
}

blocks = tempBlocks;
isLoading = false;

数组blocks是一个全为1像素块的数组。每个块都呈现如下:

g.setColor(color);
g.drawLine(x, y, x, y);

我这样称呼他们:

for (int i = 0; i < getCurrentScene().blocks.size(); i++) 
    getCurrentScene().blocks.get(i).render(g);

它是 1280x720 块...这是渲染如此多的块的更好方法吗?因为我希望它从 1280x720 的图像加载。我现在得到 3 FPS...

对于你现在正在做的事情,如果你对每一帧都这样做,你就是在为每一帧到处创建新对象,并且在丢弃并允许垃圾收集器挑选之前只使用它们一次他们起来。

创建足够多的对象来表示屏幕现在的样子。 创建足够的对象来表示屏幕应该如何 next.
不要失去那些。不要再创作了。

对于你正在做的 Color(int int int) 事情?你可以只做 Color(int); new color(level.getRGB(x, y)) 应该可以正常工作; java.awt.Color class 可以接受一个整数而不是三个。

也就是说,您仍然需要对 Color 进行一百万次初始化。如果您的 Colors 数量有限,直接调用它们或以某种方式缓存它们可能会更好,而不是在堆上不断地重新创建新的 Color 对象。

Shepard 在评论中解决了它。我所做的是将图像渲染为 g.drawImage(image, x, y); 而不是渲染所有像素。我仍然使用块进行碰撞检测,但效率更高。