2010-09-24 3 views
2

Я пытаюсь нарисовать экран приветствия для своей игры, но только когда игра загружается. Я не хочу, чтобы он перекрашивался каждый раз во время игры.Java - Paint, JFrame и Backgrounds

Так что я сделал это (где isStart конкретизируется как истинный):

public myClass(String name){ 
    setSize(800, 800); 
    setVisible(true); 
    setResizable(false); 
    runGame() 
} 

public void paint(Graphics g) { 
    if(nowStarting) 
     g.drawImage(WelcomeGameScreen, 0, 0, null); 
    isStart = false; 
} 

Проблема заключается в том, что изображение появится на секунду, а затем исчезают? Как ни странно, он работает, когда я не учитываю условие if/isStart. Что случилось с этим?

ответ

1

Я предполагаю, что вы не скопировали дословный код, и в вашем коде выше будет ошибка. Если ваш код - то, что я думаю, это ...

public void paint(Graphics g) { 
    if(isStart) 
     g.drawImage(WelcomeGameScreen, 0, 0, null); 
    isStart = false; 
} 

Тогда при запуске он нарисовал ваш заставку. Но, поскольку вы затем устанавливаете isStart в false, в следующий раз, когда вызывается краска, изображение больше не будет нарисовано. Метод paint вызывается всякий раз, когда ОС сообщает экрану, что его необходимо обновить (и когда вы его нажмете с помощью перерисовки).

Способ, которым вы можете обойти это, заключается в том, чтобы установить isStart в false в приложении, когда игра закончила загрузку, а затем переадресовать.

0

Я думаю, что ваш newStarting boolean заменяется на false, как только панель будет нарисована.

+0

Да, но не должен ли он вводить if-заявление один раз и красить фон один раз? Затем он выйдет из метода paint(), а не будет возвращаться, так как я не буду снова переписывать(). (Еще нет, то есть.) –

0

Причина, по которой она немедленно исчезла, связана с репликациями, которые запускаются каркасом Swing. Кроме того, вы написали код для экрана приветствия внутри метода overridden paint().

См. Ссылку this, чтобы получить подробное объяснение того, как запускать окно всплеска. У вас также есть класс SplashScreen в Java 1.6

+0

Есть ли другой способ? Что касается JFrame, а не JWindow? –