【问题标题】:Java 2D: Render a very large amount of tiles on screen quicklyJava 2D:在屏幕上快速渲染大量图块
【发布时间】:2012-03-30 11:19:43
【问题描述】:

另一个快速的问题,如果有人愿意的话。我有这个代码:

        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);
                        }
                    }
                }
            }
        }

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

【问题讨论】:

    标签: java performance 2d render paintcomponent


    【解决方案1】:

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

    如果它适合您的用例,您可以开始用散列替换那些 4D 字符串数组(然后您将只有一个循环)。

    【讨论】:

    • 我该如何实现呢?就像我如何将 4D 数组存储在哈希中?
    • 您可以告诉我们您为什么使用 4D 数组。它代表什么数据?
    • 从文件中以字符串形式加载的数据值要在哈希图中访问,以获取要在屏幕上绘制的图像。我使用 4D 是因为它易于访问以允许对地图进行分块
    • 不要使用 4 个字符串,而是将它们散列成一个字符串,并根据散列值制作散列图。
    • 它们已经是一个字符串,我将它们作为一个字符串访问。你在每个维度中输入的每个数字都会弹出一个字符串
    猜你喜欢
    • 2017-11-05
    • 2010-09-17
    • 1970-01-01
    • 2019-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多