Tilemap绘图不工作Java

时间:2014-11-25 23:41:58

标签: java swing graphics tile

我正在制作一个只在我的JPanel上绘制一个tilemap的小程序,但是当我运行程序时,它会绘制地图,但它会绘制两次,当我最大化窗口时,一切都会消失。

这是我的代码:

 package main;

  import javax.swing.*;

  import java.awt.*;
  import java.io.*;
  import java.util.*;

  public class Board extends JPanel{

    int width = 10;
   int height = 10;
    int size = 30;

   int x;
   int y;

   int[][] map = map1.map;
   ArrayList<Tile> tiles = new ArrayList<Tile>();

   public Board(){

    loadMap();

    Thread t = new Thread(){

        public void run(){

            while(1 != 0){
                try {
                    Thread.sleep(10);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                repaint();

            }

        }

    };

    t.start();

    }

   public void loadMap(){
    int x = 0;
    int y = 0;

    for (int i = 0; i < height; i++) {
        for (int j = 0; j < width; j++) {

            int tex = map[i][j];
            Tile t = new Tile(x,y,tex);         
            tiles.add(t);

            x+= size;
        }
        y += size;
    }
    }

   public void drawMap(Graphics g){

   int index = 0;

    for (int i = 0; i < height; i++) {
        for (int j = 0; j < width; j++) {

            Tile t = tiles.get(index);

            if(t.tex == 0)
                g.setColor(Color.gray);
            else if(t.tex == 1)
                g.setColor(Color.magenta);

            g.fillRect(x,y,size,size);

            index++;
            x += size;
        }
        x = 0;
        y += size;
    }

   }

   public void paint(Graphics g){

    drawMap(g);
   }








    public static void main(String[] args){

        JFrame j = new JFrame();
        j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        j.setVisible(true);
        j.add(new Board());
        j.setSize(600,600);
        j.setLocationRelativeTo(null);

    }



 }

我的tile类和map类是自解释的,Tile类只包含几个变量x,y,而map中只有一个数组[] [],而这些似乎不是问题。

它以我想要的方式打印地图,但是它下面有一个克隆,当我调整窗口大小时,一切都消失了。我不知道为什么会这样做,任何帮助都会受到赞赏。

由于

1 个答案:

答案 0 :(得分:0)

没有运行代码:

1

你正在破坏油漆链。但是不要调用super.paint你不允许组件为绘画做好准备。绘画是一系列复杂的链式方法调用,它们共同产生所需的输出,除非你准备接管这项工作,否则你必须先调用super.xxx

通常建议您覆盖paintComponent代替,原因很简单,其中一个您刚刚发现......

@Override
protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    drawMap(g);
}

有关如何在Swing中进行绘制的详细信息,请参阅Painting in AWT and SwingPerforming Custom Painting

2

您的drawMap方法依赖于实例字段来绘制网格,这意味着每次调用该方法时,y(特别是)的值都与它们时的值相同方法最后退出......

没有没有真正的理由他们应该是实例字段,他们只有drawMap方法中的上下文......

public void drawMap(Graphics g) {

    int x = 0;
    int y = 0;

    int index = 0;

    for (int i = 0; i < height; i++) {
        for (int j = 0; j < width; j++) {

            Tile t = tiles.get(index);

            if (t.tex == 0) {
                g.setColor(Color.gray);
            } else if (t.tex == 1) {
                g.setColor(Color.magenta);
            }

            g.fillRect(x, y, size, size);

            index++;
            x += size;
        }
        x = 0;
        y += size;
    }

}