##実現したいこと
ブロック崩しとの関連性がないプログラムコードですが、このサイトに自分がやりたかったことがあったので引用しました。
実現したいことは、いまこのプログラムのカウントダウンが終わったら、ゲーム本体のスレッドを開始したいと思っております。
つまり、5秒たったらこのプログラムは終了し、別のゲームのほうに移りたいと考えています。
しかし、カウントダウン中にも、ゲーム本体のスレッドが開始してしまい、制限時間が40秒と設定したところ、36秒となってしまいます。前回の質問の通り、ブロック崩し本体のコードは長くて載せられない状況となっています。
実際に自分が変えていることは、カウントダウンが―1となったら、別のクラスbreakoutクラスに返したいと思っています。ブロック崩し本体のスレッドのsleepメソッドは20と指定しています。
java
1import java.awt.CardLayout; 2 3import javax.swing.JFrame; 4import javax.swing.JLabel; 5import javax.swing.JPanel; 6 7import javax.swing.Timer; 8import java.awt.Color; 9 10@SuppressWarnings("serial") 11public class TimerTest1 extends JFrame { 12 static int x=855; 13static int y=800; 14 private Timer timer; 15 private int countdown_sec = 5; 16 private CardLayout card = new CardLayout(0, 0); 17 18 public static void main(String[] args) { 19 20 21 TimerTest1 frame = new TimerTest1(); 22 23 frame.setSize(x,y); 24 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 25 frame.getContentPane().setBackground(new Color(0, 0, 0)); 26 breakout panel= new breakout(); 27 28 29 frame.add(panel); 30 31 frame.setVisible(true); 32 33 } 34 35 TimerTest1() { 36 // setDefaultCloseOperationは一番先頭で 37 38 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 39 setTitle("タイトル画面"); 40 setLayout(card); 41 42 JPanel labelPanel = new JPanel(); 43 JLabel label = new JLabel(); 44 JPanel game_over = new breakout(); 45 game_over.setOpaque(false); 46 47 labelPanel.add(label); 48 add(labelPanel, "title_window"); 49 timer = new Timer(1000, (e) -> { 50 label.setText(String.valueOf(countdown_sec)); 51 if (countdown_sec ==-1){ 52 add(game_over, "gameover_window"); 53 timer.stop(); 54 55 showPanel("gameover_window"); 56 57 return; 58 } 59 countdown_sec--; 60 }); 61 62 63 64 65 timer.start(); 66 67 68 } 69 70 public void showPanel(String name) { 71 card.show(getContentPane(), name); 72 } 73}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/01/05 09:03
2020/01/05 09:24