質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
JFrame

JFrameはJFC/Swingフレームワークのコンポーネントであり、トップレベルのコンテナです。

Java

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

Swing

SwingはJavaに標準で付属するグラフィック関連のクラスライブラリを指します。

while

Whileは多くの言語で使われるコントロール構造であり、特定の条件が満たされる限り一連の命令を繰り返し実行します。

ウィンドウ

コンピューター用語において、ウィンドウとはユーザとプログラムのやり取りを可能にするGUIの枠組みのことをいいます。

Q&A

解決済

1回答

361閲覧

JFrameでWhileを使うとWindowが表示されなってしまいました。

退会済みユーザー

退会済みユーザー

総合スコア0

JFrame

JFrameはJFC/Swingフレームワークのコンポーネントであり、トップレベルのコンテナです。

Java

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

Swing

SwingはJavaに標準で付属するグラフィック関連のクラスライブラリを指します。

while

Whileは多くの言語で使われるコントロール構造であり、特定の条件が満たされる限り一連の命令を繰り返し実行します。

ウィンドウ

コンピューター用語において、ウィンドウとはユーザとプログラムのやり取りを可能にするGUIの枠組みのことをいいます。

0グッド

0クリップ

投稿2018/09/24 09:33

Swingクラスを使用してJFrameでウィンドウを表示させているのですが、何故かShooting gameのタイトル画面を作ろうとして、

キー入力処理を処理するために、Whileを書いて処理をループさせようとしたのですが、何故かそうするとJFrameのウインドウが表示されなくなってしまいました。 どうすればJFrameウインドウを表示しながらループ処理が組めるのでしょうか?どなたか改善方法を教えて下さい。

ループ処理に入るとウインドウが表示されません。

ちなみにそのプログラムはこちらです。

プログラム

Java

1 2//import 3import java.awt.*; 4import javax.swing.*; 5import java.applet.Applet; 6import java.awt.event.KeyEvent; 7 8class Mine extends JFrame{ 9 10//メンバ変数 11static boolean Speace_key=false; 12 13static boolean UP_key=false; 14static boolean DOWN_key=false; 15static boolean LEFT_key=false; 16static boolean RIGHT_key=false; 17 18 //メイン関数。 19 public static void main(String args[]){ 20 //Show window 21 Mine frame = new Mine("Shooting game"); 22 frame.setResizable(false); 23 frame.setVisible(true); 24 } 25 26//サブ関数。 27 Mine(String title){ 28 setTitle(title); 29//コンポーネント系を追加。 30enableEvents(java.awt.AWTEvent.KEY_EVENT_MASK);//キー入力処理の有効化 31 32//変数宣言 33int x=0; int y=0; 34 35int HP=3; int score=0; 36int Lv=1; int xp=0; 37 38int tm_x=0; int tm_y=0; 39 40int tx=0; int ty=0; 41 42 //ウィンドウを表示 43 setSize(800, 700); 44 setLocationRelativeTo(null); 45 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 46 //ここから先が表示プログラム 47 setLayout(new FlowLayout()); 48 49 //文字描画システム初期化 50 JLabel Text = new JLabel("Starting game if please space key"); 51 Text.setPreferredSize(new Dimension(500, 510)); 52 Text.setFont(new Font(null,0,30)); 53 54//JFrameにオブジェクトを追加 55 add(Text); 56 57//タイトル画面終了判別プログラム。 58while(true){ 59 if(Speace_key==true){ 60 Text.removeAll(); 61 break;} 62} 63 64 65 66 67 } 68 @Override 69 protected void processKeyEvent(KeyEvent e){ 70 71 if(e.getKeyCode()==KeyEvent.VK_SPACE){ 72 Speace_key=true; 73 } 74 if(e.getKeyCode()!=KeyEvent.VK_SPACE){ 75 Speace_key=false; 76 } 77 78 } 79}

試したこと

見ていた講座を視聴し直しましたが、解決方法は見つかりませんでした。

補足情報

パソコンのOS:Windows10 グラフィックボードの機種:AMD
プログラミングに使用したIDE:Netbeans64

使用プログラミング言語:Java
今までに参考にした動画シリーズ:YouTube(https://youtu.be/FsRHdL_r0pE)
前まで参考にしていたサイト:不明

プログラミング言語習得方針:ゲーム開発が普通のプログラミングで普通のIDEで出来るようになれれば良い。

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

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

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

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

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

guest

回答1

0

ベストアンサー

キーの処理をprocessKeyEventのオーバーライドで行うというのを、
どこで聞いたかは知りませんが、一般的にはやめたほうが無難です。

次にループ処理ですが、少なくてもswingでは特殊なケースを除き、
使ってはいけません。

さらに、今回のループは、コンストラクタの中ですので、
ループが終了するまで、コンストラクタが終了せず、
そのため、次の

java

1frame.setResizable(false); 2frame.setVisible(true); 3 4```という部分まで実行出来ていないはずです。 5 6 7以上をまとめると、 8 91.ループをやめる 102.processKeyEventのオーバーライドをやめる 113.キーイベントはKeyListenerを追加して行う 12 13となります。

投稿2018/09/24 14:59

ngsvx

総合スコア287

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

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

退会済みユーザー

退会済みユーザー

2018/09/25 09:45

ご丁寧にわかりやすくご回答ありがとうございます。 取り敢えずKeyEvent処理にオーバーライド処理を使用することをやめ、 KeyListenerを追加して行いたいと思います。 そして一つお伺いしたいことがあるのですが、ようするにSwingクラスはソフト開発を 目的としたクラスでSwingクラスはゲーム開発に不向きという事なんでしょうか? もしそうなのであればゲーム開発向けのクラスを教えて頂けませんか? まだ初心者なので詳しく知らくて良くわかっていないのが今の現状なんです。 ちなみにAppletはループ処理に適していますか?。 質問が多くてすいません。 もしよければゲーム向けのクラス等をお教えして頂けますと嬉しいです。
ngsvx

2018/09/25 14:10

>Swingクラスはソフト開発を 目的としたクラスでSwingクラスはゲーム開発に不向きという事なんでしょうか? ゲームの種類によるでしょう。 少なくても、RPGやテーブルゲームのようなものであれば、 問題はないかと思います。 アクションゲームや格闘ゲームのようにキーのタイミングがシビアなものでは どうなるかは、ちょっとわかりません。 あと、これらは、あくまでも非3D画像の話です。 3D描画するには、java3Dというのがあった気がしますが、 使ったことがないので、知りません。 >Appletはループ処理に適していますか? Swingやawtに限らず、大抵のウインドウシステムは、ループ処理を許すようには出来ていないと思います。 例えば、ウインドウの移動やサイズ変更などという処理は、プログラムがOSに制御を返したときに 実行されるものがほとんどでしょう。 どうしてもループ処理するのであれば、ループ処理を別スレッドにしないといけないのが普通だと思います。 最後に、ゲームを作るのだけが目的なのであれば、一度「unity ゲーム」をキーワードで 検索してみてはいかがでしょうか。 これも、私は使ったことがないので、詳しくは知りませんが、ゲーム用のライブラリみたいなものだったと思います。
退会済みユーザー

退会済みユーザー

2018/09/26 09:07

ご回答ありがとうございます、一応基本的にはUnityでゲーム制作は行うつもりではいましたが、 どうしてもソフト制作とRPGゲーム等のスクロール処理が入るゲーム以外の例えばShooting game等は 制作して見たかったのでJavaで制作していました。 ちなみに僕はソフトウェア制作とShooting game以外のゲーム等の制作はJavaでは行わないつもりです。 そこで最後にもう一つお伺いしたいことがあるのですが、JavaでプログラミングしてShooting gameを 制作するとしたらどのように制作すべきでしょうか?。 何度も我儘を言ってしまってすいません。 もしJavaでの制作が困難だったりするのであれば諦めます。
ngsvx

2018/09/26 16:29

私は、javaでゲームといえば、昔オセロゲームを作ったことがあるくらいなので、詳しくは知りません。 「java シューティングゲーム」で検索すると、意外と引っかかるので、いろいろと見て試してみてはどうでしょうか。 ただ、いくつか見たところ、アプレットで作っているケースが多いようでしたので、そこは注意です。
退会済みユーザー

退会済みユーザー

2018/09/27 09:05

分かりました、僕が最終的にプログラミングをする事を決意する鍵になった僕がとても尊敬している方の、 草あんこさんの動画を参考にし、シューティングゲーム制作用の講座サイトを見てみます。 ここまでご回答ありがとうございました、プログログラミングやライブラリには色々な物があり、 まさに全て知ろうと思えば宇宙のチリを調べるような物ですが、頑張って見たいと思います!!。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問