2016-03-30 5 views
0

Я создаю игру в java, используя Graphics2D и Canvas.Java-игра не будет отображаться на втором мониторе

Когда я запускаю программу, на моем первом мониторе появляется JFrame, и проблем нет. Однако, когда я перетаскиваю JFrame на свой второй монитор, он становится серым и перестает отображать что-либо, а затем, когда я перетаскиваю его обратно на свой первый монитор, программа продолжает рендеринг.

Мой цикл игры вызывает метод draw() в моем Screen класс, который распространяется на 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. В частности, вам необходимо окружить рендеринг контурами, которые проверяют значения, возвращаемые методамии contentsLost() BufferStrategy.

+0

Спасибо, это также устранило еще одну проблему, с которой я играю каждый раз, когда она изменяется. –