2013-09-28 2 views
0

Я кодирую игру, и я хочу, чтобы там логотип компании около 3-5 секунд, прежде чем войти в игру. Вот мой код:Почему вместо моего изображения появляется пустой холст?

Graphics gfx = buffer.getDrawGraphics(); 
    gfx.setColor(new Color(146, 17, 189)); 
    gfx.fillRect(0, 0, this.getWidth(), this.getHeight()); 
    // Draw stuffs between here... 
    gfx.drawImage(icon.getImage(), 0, 0, this.getWidth(), this.getHeight(), null); 
    int timer = 0; 
    while (timer <= 4) { 
     try { 
      Thread.sleep(1000); 
     } catch (InterruptedException exc) { 
      exc.printStackTrace(); 
      System.out.println("Could not put thread to sleep! :("); 
     } 
     timer++; 
    } 
    gfx.drawImage(image, 0, 0, this.getWidth(), this.getHeight(), null); 
    if (key.showFPS == true) { 
     //Set it up so that it still works with the "per second" rule. 
     key.showPerSeconds(buffer, FPS, TPS); 
    } 
    // and here. 
    gfx.dispose(); 
    buffer.show(); 
} 

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

+1

'Графика gfx = buffer.getDrawGraphics();' Что такое 'buffer'? Чтобы лучше помочь, опубликуйте [SSCCE] (http://sscce.org/). Не блокируйте EDT (Event Dispatch Thread) - графический интерфейс «замораживается», когда это произойдет. Вместо вызова 'Thread.sleep (n)' реализовать Swing 'Timer' для повторения задач или' SwingWorker' для длительных задач. Подробнее см. [Параллелизм в Swing] (http://docs.oracle.com/javase/tutorial/uiswing/concurrency/). –

ответ

0

Это занимает 4 секунды, чтобы нарисовать полную JFrame, потому что у вас есть сон 4 секунд в вашем коде:

while (timer <= 4) { 
     try { 
      Thread.sleep(1000); 
0

Эта проблема может быть в переменной изображения через некоторое время петли Thread.sleep.

gfx.drawImage(image, 0, 0, this.getWidth(), this.getHeight(), null); 

Это изображение делает вашу раму пустой.