java - 在 java 中构建 2D map 的其他方法

标签 java swing jpanel textures paintcomponent

由于我是java新手,我想到编写一个简单的2D游戏,您可以在由16x16图形组成的2D世界中行走。我已经找到了创建纹理 JPanel 的方法:

public class TexturedPanel extends JPanel {
    private Image image;
    private boolean tile;

    TexturedPanel(Image image) {
        this.image = image;
        this.tile = true;
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        if(tile) {
            int iw = image.getWidth(this);
            int ih = image.getHeight(this);
            if (iw > 0 && ih > 0) {
                for(int x = 0; x < getWidth(); x += iw) {
                    for(int y = 0; y < getHeight(); y += ih) {
                        g.drawImage(image, x, y, iw, ih, this);
                    }
                }
            }
        } else {
            g.drawImage(image, 0, 0, getWidth(), getHeight(), this);
        }
    }
}

现在我必须决定是继续使用这种方法还是应该使用另一种方法......

那么有没有更好(更快/更简单)的方法来构建纹理 JPanel?

提前致谢,马文

最佳答案

请注意,您发布的方法仅平铺单个图像。您可能想要平铺多个图像。

实现此目的的一种方法是使用包含每个网格单元的图 block 类型的 2D 数组,然后使用该数组来决定在每个网格单元处绘制哪个图像。

我建议从较小的开始 - 你可以先根据二维数组绘制不同颜色的矩形吗?

关于java - 在 java 中构建 2D map 的其他方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27605292/

相关文章:

Java:光标当前位置的列号和行号

java - JTable 排序在单元格中没有好的值(value)

java - JTabBar 中的 JPanel 不可滚动

java - 从技术上讲,Oracle JDK 和 OpenJDK 之间的主要区别是什么?

java - 在没有捕获的 try/catch/finally 中会发生什么?

java - 为什么在maven周期的install阶段,也会调用package阶段?

java - 具有 JTable 多行列的自定义渲染器

Java线程在run()中使用 'return;'

java - 将 JButton actionListener 传递给另一个 Java 类时出现空指针异常

Java Swing GridLayout 顶部和底部有大面板