在Java

时间:2018-03-26 14:21:59

标签: java arrays jframe jpanel paint

我是java和appologies的初学者,用于任何错误的术语。

我正在尝试创建一个简单的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);
}

和playfield:

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

但遗憾的是我无法找到办法做到这一点,或者我做了但却没理解。 如果有人可以指出我的正确方向,那将是非常棒的!

提前感谢。

1 个答案:

答案 0 :(得分:0)

你可以在你的绘画功能中使用这样的东西:

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

BTW:我认为最好覆盖paintComponent而不是paint,请参阅this post