【问题标题】:draw or paint a 2D array in Java在 Java 中绘制或绘制二维数组
【发布时间】:2018-09-04 17:34:06
【问题描述】:

我是 java 初学者,对任何错误的术语表示歉意。

我正在尝试创建一个简单的 2D 游戏,只是为了了解有关 java 工作原理的更多信息。

现在我想知道的是如何使用 2D 数组并绘制它。并且也许添加一个简单的图标(播放器),您可以使用箭头键四处移动。

目前我有以下类 Keybarricade:

public class Keybarricade{

public static void main(String[] args)
{
    JFrame obj = new JFrame();
    Playingfield playingfield = new Playingfield();

    obj.setBounds(0, 0, 900, 900);
    obj.setBackground(Color.GRAY);
    obj.setResizable(false);
    obj.setVisible(true);
    obj.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    obj.add(playingfield);
}

和运动场:

public class Playingfield extends JPanel{
private ImageIcon playerIcon;
private int [][] playinggrid = new int[10][10];
private int [] playerX = new int[10];
private int [] playerY = new int[10];

public Playingfield()
{

}

public void paint (Graphics g)
{
    //draw border for playingfield
    g.setColor(Color.white);
    g.drawRect(10, 10, 876, 646);

    //draw background for the playingfield
    g.setColor(Color.LIGHT_GRAY);
    g.fillRect(11, 11, 875, 645);

    //draw player imageicon
    playerIcon = new ImageIcon("src/images/playerIcon.png");
    playerIcon.paintIcon(this, g, playerX[1], playerY[1] );

}

这给出了以下窗口:window I have right now

我想要的是使用 2D 数组来绘制/绘制 10x10 网格,如下所示:window I would like

但遗憾的是我找不到这样做的方法,或者我做了但不明白。 如果有人能指出我正确的方向,那就太棒了!

提前致谢。

【问题讨论】:

    标签: java arrays jframe jpanel paint


    【解决方案1】:

    你可以在你的绘画函数中使用这样的东西:

        int boxWidth = 30;
        int boxHeight = 30;
    
        for (int currentX = 0; 
                currentX < playinggrid.length * boxWidth;
                currentX += boxWidth) {
            for (int currentY = 0;
                    currentY < playinggrid[0].length * boxHeight;
                    currentY += boxHeight) {
                g.drawRect(currentX, currentY, boxWidth, boxHeight);
            }
        }
    

    如果您想在单元格中间绘制图标,您可以在两个 for 循环中执行以下操作:

        g.drawImage(playerIcon.getImage(),
                    currentX + boxWidth/2 - playerIcon.getIconWidth()/2,
                    currentY + boxHeight/2 - playerIcon.getIconHeight()/2,
                    null);
    

    顺便说一句:我认为重写paintComponent而不是paint更好,请参阅this post

    【讨论】:

    • 谢谢!这确实创建了我正在寻找的网格。你知道我怎么能在不同单元格的中心放置一个播放器图标吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 2019-02-07
    • 1970-01-01
    • 1970-01-01
    • 2016-05-18
    相关资源
    最近更新 更多