🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

2080閲覧

java カウントダウン終わったらゲーム実行したいです

退会済みユーザー

退会済みユーザー

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2020/01/05 03:06

##実現したいこと
題名の通り、カウントダウン後に本体のゲームを実行できるようにしたいです。具体的にはゼロ秒になったらゲーム実行できるようにすることです。

自分の考えでは、if文でsecがゼロになったら、次の実行画面に移動できるようにしたい考えです。ほかの方法はありますか?
##プログラムの説明
breakoutがカウントダウン後に実行されるクラスです。コードが長く文字量の関係でみられないです。TimerTest1がメインとなっています。今の現状は、TimerTest1が実行し、フレームとカウントダウンが表示されますが、0秒となったらstartだけ表示し、次の実行へ移動されない状態です。どうかご協力をお願いします

java

1import javax.swing.*; 2import java.awt.BorderLayout; 3import java.awt.event.*; 4 5 6import java.awt.*; 7 8import javax.swing.Timer; 9public class TimerTest1 extends JFrame implements ActionListener{ 10 static int x=855; 11 static int y=800; 12 Timer timer; 13 JLabel label; 14 static int sec; 15 public static void main(String[] args){ 16 JFrame fr = new JFrame("Tile-based game"); 17 TimerTest1 frame = new TimerTest1(); 18 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 19 frame.setSize(x,y); 20 frame.setTitle("タイトル"); 21 22 frame.setVisible(true); 23 fr.setSize(x,y); 24 fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 25 fr.getContentPane().setBackground(new Color(0, 0, 0)); 26 27 if(sec==0){ 28 breakout panel = new breakout(); 29 30 panel.setOpaque(false); 31 32 fr.add(panel); 33 34 fr.setVisible(true); 35 } 36 37 } 38 39 40 TimerTest1(){ 41 sec = 5; 42 label = new JLabel(); 43 44 JPanel labelPanel = new JPanel(); 45 labelPanel.add(label); 46 47 timer = new Timer(1000 , this); 48 49 getContentPane().add(labelPanel, BorderLayout.CENTER); 50getContentPane().add(labelPanel, BorderLayout.CENTER); 51 timer.start(); 52 } 53 54 public void actionPerformed(ActionEvent e){ 55 label.setText(sec + " "); 56 57 if (sec <= 0){ 58 label.setText("start"); 59 timer.stop(); 60 }else{ 61 sec--; 62 } 63 } 64}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

java のコマンドからの基本動作と swing の動作は大きく異なります.
簡単に言えば, setVisible(true) を行った瞬間からマルチタスクで動作し始めます. (そのため, main メソッド内で setVisivle(true) 実行以降にコンポーネントの操作を行うと swing が誤動作する場合があります. main メソッドから swing を確実(?)に起動する書き方もありますので, お調べになってみては如何でしょうか.)

ですので, setVisible 以降のコードは swing の画面の状況に関係無くそのまま実行が継続され, 件の場合は if 文は意味を成しません.

start と表示した後に実行するのであれば, 表示の直後に書く必要があると思います.

投稿2020/01/05 03:43

jimbe

総合スコア13202

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/01/05 07:10

何とか出来ました。ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問