2016-03-30 11 views
0

私はGraphics2DとCanvasクラスを使用してJavaでゲームを作成しています。Javaゲームは第2のモニタでレンダリングされません

私がプログラムを実行すると、最初のモニタにJFrameが表示され、問題はありません。しかし、JFrameを2番目のモニタにドラッグすると、灰色に変わって何かレンダリングが停止します。その後、最初のモニタにドラッグすると、プログラムはレンダリングを続けます。

私のゲームループは、Screendraw()メソッドを呼び出します。 Canvasを拡張するクラスです。これは描画メソッドです。

public void draw(){ 
    BufferStrategy bs = getBufferStrategy(); 
    if(bs == null){ 
     createBufferStrategy(2); 
     bs = getBufferStrategy(); 
     g = (Graphics2D) bs.getDrawGraphics(); 
    } 

    g.setColor(Color.BLACK); 
    g.fillRect(0, 0, getWidth(), getHeight()); 

    g.setColor(Color.WHITE); 
    g.drawString("Hello, this works", 300, 300); 

    g.drawImage(ImageLoader.test[0][0], 100, 100, null); 

    bs.show(); 
} 
+0

http://stackoverflow.com/questions/4627553/show-jframe-in-a-specific-screen-in-dual-monitor-configuration、これが助けて欲しいと思っています:) –

+0

それは助けになりません。そのコードはJFrameを私の他の画面に置きますが、画面全体にドラッグすると再び破損します。私はそれを壊すことなくモニタ間で私のJframeをドラッグできるようにしたい。 –

+0

このタイプのスクリプトをループやイベントに入れても動作すると信じています –

答えて

1

Graphics(またはGraphics2D)オブジェクトへの参照をメソッドの範囲外にしないでください。

g = (Graphics2D) bs.getDrawGraphics();をifブロック外に移動してください。描画するたびに新しいグラフィックスを取得する必要があります。

グラフィックを描画するとすぐにグラフィックのdisposeも必要です。

BufferStrategyの使用は少し複雑です。 BufferStrategy documentationのサンプルコードを見ることをお勧めします。特に、BufferStrategyのcontentsRestored()およびcontentsLost()メソッドによって返される値をチェックするループでレンダリングを囲む必要があります。

+0

ありがとう、これはゲームがサイズ変更されるたびに破損しているような別の問題を修正しました。 –

関連する問題