Переключение между изображениями, без белой вспышки, происходящей в java.
Привет, я пытаюсь сделать этот обратный отсчет через JFrame.
package yasuharu.takanashi; import java.awt.Graphics; import java.awt.Image; import java.awt.Toolkit; import javax.swing.JFrame; import javax.swing.JPanel; public class TitanBall extends JPanel{ static int FrameHeight = 1320, FrameLength = 700; //Bestemmer Højde og længde af frame. static int Tid = 31; //Til countdown public static void main(String[] args) throws InterruptedException { //Laver frame JFrame TitanBall = new JFrame("Yasuharu Takanashi"); TitanBall.pack(); TitanBall.setSize(FrameHeight, FrameLength); TitanBall.setVisible(true); TitanBall.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); new MusicIntro(); // Intro musik til "Loading screen" TitanBall StartScreen = new TitanBall(); TitanBall.add(StartScreen); while(Tid > 0){ //Countdown TitanBall.validate(); TitanBall.repaint(); //Repainter det nye billede Tid--; //Tæller en ned Thread.sleep(1000); //Stopper koden i 1 sekund. } TitanBall.add(new Grafik_Bane()); //Caller banen ind. TitanBall.validate(); //Painter banen. new MusicIngame(); // Starter musik i spillet. } // Start screen og countdown. @Override public void paint(Graphics g) { super.paint(g); if(Tid == 30){ // 30 sekunder Image StartScreen30 = Toolkit.getDefaultToolkit().getImage("StartScreen30.png"); g.drawImage(StartScreen30, 0, 0, 1320, 700, this); } if(Tid == 29){ // 29 sekunder Image StartScreen29 = Toolkit.getDefaultToolkit().getImage("StartScreen29.png"); g.drawImage(StartScreen29, 0, 0, 1320, 700, this); } if(Tid == 28){ // 28 sekunder Image StartScreen28 = Toolkit.getDefaultToolkit().getImage("StartScreen28.png"); g.drawImage(StartScreen28, 0, 0, 1320, 700, this); } if(Tid == 27){ // 27 sekunder Image StartScreen27 = Toolkit.getDefaultToolkit().getImage("StartScreen27.png"); g.drawImage(StartScreen27, 0, 0, 1320, 700, this); } if(Tid == 26){ // 26 sekunder Image StartScreen26 = Toolkit.getDefaultToolkit().getImage("StartScreen26.png"); g.drawImage(StartScreen26, 0, 0, 1320, 700, this); } if(Tid == 25){ // 25 sekunder Image StartScreen25 = Toolkit.getDefaultToolkit().getImage("StartScreen25.png"); g.drawImage(StartScreen25, 0, 0, 1320, 700, this); } if(Tid == 24){ // 24 sekunder Image StartScreen24 = Toolkit.getDefaultToolkit().getImage("StartScreen24.png"); g.drawImage(StartScreen24, 0, 0, 1320, 700, this); } if(Tid == 23){ // 23 sekunder Image StartScreen23 = Toolkit.getDefaultToolkit().getImage("StartScreen23.png"); g.drawImage(StartScreen23, 0, 0, 1320, 700, this); } if(Tid == 22){ // 22 sekunder Image StartScreen22 = Toolkit.getDefaultToolkit().getImage("StartScreen22.png"); g.drawImage(StartScreen22, 0, 0, 1320, 700, this); } if(Tid == 21){ // 21 sekunder Image StartScreen21 = Toolkit.getDefaultToolkit().getImage("StartScreen21.png"); g.drawImage(StartScreen21, 0, 0, 1320, 700, this); } if(Tid == 20){ // 20 sekunder Image StartScreen20 = Toolkit.getDefaultToolkit().getImage("StartScreen20.png"); g.drawImage(StartScreen20, 0, 0, 1320, 700, this); } if(Tid == 19){ // 19 sekunder Image StartScreen19 = Toolkit.getDefaultToolkit().getImage("StartScreen19.png"); g.drawImage(StartScreen19, 0, 0, 1320, 700, this); } if(Tid == 18){ // 18 sekunder Image StartScreen18 = Toolkit.getDefaultToolkit().getImage("StartScreen18.png"); g.drawImage(StartScreen18, 0, 0, 1320, 700, this); } if(Tid == 17){ // 17 sekunder Image StartScreen17 = Toolkit.getDefaultToolkit().getImage("StartScreen17.png"); g.drawImage(StartScreen17, 0, 0, 1320, 700, this); } if(Tid == 16){ // 16 sekunder Image StartScreen16 = Toolkit.getDefaultToolkit().getImage("StartScreen16.png"); g.drawImage(StartScreen16, 0, 0, 1320, 700, this); } if(Tid == 15){ // 15 sekunder Image StartScreen15 = Toolkit.getDefaultToolkit().getImage("StartScreen15.png"); g.drawImage(StartScreen15, 0, 0, 1320, 700, this); } if(Tid == 14){ // 14 sekunder Image StartScreen14 = Toolkit.getDefaultToolkit().getImage("StartScreen14.png"); g.drawImage(StartScreen14, 0, 0, 1320, 700, this); } if(Tid == 13){ // 13 sekunder Image StartScreen13 = Toolkit.getDefaultToolkit().getImage("StartScreen13.png"); g.drawImage(StartScreen13, 0, 0, 1320, 700, this); } if(Tid == 12){ // 12 sekunder Image StartScreen12 = Toolkit.getDefaultToolkit().getImage("StartScreen12.png"); g.drawImage(StartScreen12, 0, 0, 1320, 700, this); } if(Tid == 11){ // 11 sekunder Image StartScreen11 = Toolkit.getDefaultToolkit().getImage("StartScreen11.png"); g.drawImage(StartScreen11, 0, 0, 1320, 700, this); } if(Tid == 10){ // 10 sekunder Image StartScreen10 = Toolkit.getDefaultToolkit().getImage("StartScreen10.png"); g.drawImage(StartScreen10, 0, 0, 1320, 700, this); } if(Tid == 9){ // 9 sekunder Image StartScreen9 = Toolkit.getDefaultToolkit().getImage("StartScreen9.png"); g.drawImage(StartScreen9, 0, 0, 1320, 700, this); } if(Tid == 8){ // 8 sekunder Image StartScreen8 = Toolkit.getDefaultToolkit().getImage("StartScreen8.png"); g.drawImage(StartScreen8, 0, 0, 1320, 700, this); } if(Tid == 7){ // 7 sekunder Image StartScreen7 = Toolkit.getDefaultToolkit().getImage("StartScreen7.png"); g.drawImage(StartScreen7, 0, 0, 1320, 700, this); } if(Tid == 6){ // 6 sekunder Image StartScreen6 = Toolkit.getDefaultToolkit().getImage("StartScreen6.png"); g.drawImage(StartScreen6, 0, 0, 1320, 700, this); } if(Tid == 5){ // 5 sekunder Image StartScreen5 = Toolkit.getDefaultToolkit().getImage("StartScreen5.png"); g.drawImage(StartScreen5, 0, 0, 1320, 700, this); } if(Tid == 4){ // 4 sekunder Image StartScreen4 = Toolkit.getDefaultToolkit().getImage("StartScreen4.png"); g.drawImage(StartScreen4, 0, 0, 1320, 700, this); } if(Tid == 3){ // 3 sekunder Image StartScreen3 = Toolkit.getDefaultToolkit().getImage("StartScreen3.png"); g.drawImage(StartScreen3, 0, 0, 1320, 700, this); } if(Tid == 2){ // 2 sekunder Image StartScreen2 = Toolkit.getDefaultToolkit().getImage("StartScreen2.png"); g.drawImage(StartScreen2, 0, 0, 1320, 700, this); } if(Tid == 1){ // 1 sekunder Image StartScreen1 = Toolkit.getDefaultToolkit().getImage("StartScreen1.png"); g.drawImage(StartScreen1, 0, 0, 1320, 700, this); } if(Tid == 0){ // 0 sekunder Image StartScreen = Toolkit.getDefaultToolkit().getImage("StartScreenGameStarting.png"); g.drawImage(StartScreen, 0, 0, 1320, 700, this); } } }
Поэтому здесь я стараюсь нарисовать каждый образ, каждую секунду с помощью
while(Tid > 0){ //Countdown TitanBall.validate(); TitanBall.repaint(); //Repainter det nye billede Tid--; //Tæller en ned Thread.sleep(1000); //Stopper koden i 1 sekund. }
Обратный отсчет работает. Но каждый раз, когда он переключается между следующим изображением, происходит белая вспышка.
Что я уже пробовал:
Я уже пробовал использовать;
repaint();и
validate();чаще всего, но ничего не получалось, и я знал, что у меня закончились идеи.
Richard Deeming
Предложение: Все это if (Tid == x)
высказывания, вероятно, были бы лучше как единое целое switch (Tid)
заявление.
Оператор switch (учебники Java™ > изучение языка Java > основы языка)[^]