Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java2D:在屏幕上快速渲染大量的瓷砖_Java_Performance_2d_Render_Paintcomponent - Fatal编程技术网

Java2D:在屏幕上快速渲染大量的瓷砖

Java2D:在屏幕上快速渲染大量的瓷砖,java,performance,2d,render,paintcomponent,Java,Performance,2d,Render,Paintcomponent,如果有人愿意的话,再问一个简短的问题。我有以下代码: for(int cy = 0; cy < 3; cy++) { for(int cx = 0; cx < 3; cx++) { for(int y = 0; y < 16; y++) { for(int x = 0; x < 16; x++) { g2D.dra

如果有人愿意的话,再问一个简短的问题。我有以下代码:

        for(int cy = 0; cy < 3; cy++) {
            for(int cx = 0; cx < 3; cx++) {
                for(int y = 0; y < 16; y++) {
                    for(int x = 0; x < 16; x++) {
                        g2D.drawImage(Tiles.tileImages.get(C0.chunk[x][y][cx][cy]), 
                                C0.cX[cx][cy] * cspcr + (blckspcr * x) + width - pXspcr,
                                C0.cY[cx][cy] * cspcr + (blckspcr * y) + height - pYspcr + (int)(24.25 * zoom),
                                    blckspcr, blckspcr, null);
                        if(C0.chunk[x][y][cx][cy].equals("a05")) {
                            g2D.drawImage(Tiles.treetop, 
                                    C0.cX[cx][cy] * cspcr + (blckspcr * x) + width - pXspcr,
                                    C0.cY[cx][cy] * cspcr + (blckspcr * y) + height - pYspcr + (int)(24.25 * zoom) - blckspcr,
                                    blckspcr, blckspcr, null);
                        }
                    }
                }
            }
        }
for(int-cy=0;cy<3;cy++){
对于(int cx=0;cx<3;cx++){
对于(int y=0;y<16;y++){
对于(int x=0;x<16;x++){
g2D.drawImage(Tiles.tileImage.get(C0.chunk[x][y][cx][cy]),
C0.cX[cX][cy]*cspcr+(blckspcr*x)+宽度-pXspcr,
C0.cY[cx][cY]*cspcr+(blckspcr*y)+高度-pYspcr+(int)(24.25*zoom),
blckspcr,blckspcr,null);
如果(C0.chunk[x][y][cx][cy].等于(“a05”)){
g2D.drawImage(瓷砖、树梢、,
C0.cX[cX][cy]*cspcr+(blckspcr*x)+宽度-pXspcr,
C0.cY[cx][cY]*cspcr+(blckspcr*y)+高度-pYspcr+(int)(24.25*缩放)-blckspcr,
blckspcr,blckspcr,null);
}
}
}
}
}

但我的问题是,它在我的应用程序中造成了极大的延迟。有没有什么方法可以避免使用大量的循环,或者可能加快循环速度?它首先绘制的图像是从4D字符串数组中的块中获取块,然后根据字符串从哈希映射中获取图像,然后使用一组数字绘制图像。如果有人能帮忙,我将不胜感激。谢谢

您需要以不同的方式存储数据(4D阵列几乎总是一个坏主意)


如果适合您的用例,您可以开始用散列替换这些4D字符串数组(这样您就只有一个循环)

我该如何实现这一点?比如我如何在散列中存储4D数组?你可以告诉我们为什么使用4D数组。它代表什么数据?以字符串形式从文件加载的数据值,可以在hashmap中访问,以获得要在屏幕上绘制的图像。我使用4D是因为它很容易访问,允许对地图进行分块而不是使用这4个字符串,将它们散列为一个字符串,并根据散列生成哈希图。它们已经是一个字符串,我将它们作为一个字符串访问。在每个维度中输入的每个数字都会弹出一个字符串