5

Graphics2D パラメータを受け取るこのメソッド paint() があります。奇妙なことに、System.out.println が存在しない限り (以下のブロックでコメントアウトしています)、キャンバスは何も描画しません。

public class Map{

    public void paint(Graphics2D g){

        //fill background to black
        g.setColor(Color.black);
        g.fillRect(0, 0, TILE_SIZE*WIDTH, TILE_SIZE*HEIGHT);

        //draw the tiles and buildings

        for(int i=0;i<WIDTH;i++){
            for(int j=0;j<HEIGHT;j++){
                if(map[j][i] == CLEAR){
                    //System.out.println("");
                    g.setColor(Color.gray);
                    g.fillRect(i*TILE_SIZE, j*TILE_SIZE, TILE_SIZE, TILE_SIZE);
                    g.setColor(Color.red);
                    g.drawRect(i*TILE_SIZE, j*TILE_SIZE, TILE_SIZE, TILE_SIZE);

                }
            }
        }
    }
}

ここでは、BufferStrategy を使用して Canvas に描画し、それを Frame に追加します。このメソッドはクラス Map にあり、BufferStrategy の getDrawGraphics() メソッドから Graphics2D が渡されます (多くの人がこのことを理解して、私が何をしているのかを理解してくれることを願っています)。

public class MapTest extends Canvas{

    private Map map;

    public MapTest(){

        Frame frame = new Frame("MAP");
        frame.add(this);
        frame.setVisible(true);

        createBufferStrategy(2);
        strategy = getBufferStrategy();

        //draw the map

        Graphics2D g = (Graphics2D) strategy.getDrawGraphics();
        //g.translate(100, 100);
        map.paint(g);

        g.dispose();
        strategy.show();

    }
}

このコードは Canvas クラスからのものです。ご覧のとおり、paint() メソッドは Canvas クラス (私はこれを GameTest と名付けています) とは別のものです。したがって、println ステートメントをコメント アウトすると、キャンバスにグラフィックが表示されなくなります。それ以外の場合は正しく表示されます。誰でも私を助けることができますか?

4

1 に答える 1

2

SwingUtilities を使用してイベント ディスパッチ スレッド (EDT) に切り替える必要があります。以下を参照してください。これは、AWT および Swing クラスとのほとんどすべての対話に必要です。

  SwingUtilities.invokeLater(new Runnable(){
      public void run(){
          new MapTest();
      }    
   }

これは Swing ヘルパー ライブラリを使用していることに注意してください。これは AWT には問題ありませんが、Swing を使用することをお勧めします。

于 2012-03-23T08:31:11.820 に答える