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

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

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

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

Q&A

0回答

1584閲覧

処理がうまく動かない

Alpa

総合スコア80

Java

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

0グッド

1クリップ

投稿2017/11/23 10:16

###実現したいこと
上キーを押したときに-40Y座標を下げて
またJflagで落下させたい

これはアクションゲームを作っています

java

1import javax.swing.*;//swingのimport 2import java.awt.*;//awtのimport 3import java.awt.event.*;//awtのeventのimport 4 5public class action extends JFrame implements ActionListener{ 6 7 static action Frame;//Frame 8 9 JPanel Panel;//Panel 10 11 JLabel Player;//プレイヤーの画像が入ったJLabel 12 JLabel Block;//ブロックの画像が入ったJLabel 13 14 ImageIcon PlayerIcon;//プレイヤーの画像読み込み 15 ImageIcon BlockIcon;//ブロックの画像読み込み 16 17 Timer timer; 18 Timer Ktimer; 19 20 int PlayerX = 20;//プレイヤーのX座標 21 int PlayerY = 40;//プレイヤーのY座標 22 23 static boolean Jflag = false;//ジャンプフラグ 24 static boolean UKflag = false;//ジャンプキーフラグ 25 static boolean LKflag = false;//左移動キーフラグ 26 static boolean RKflag = false;//右移動キーフラグ 27 static boolean Dflag = false;//デバックフラグ 28 29 public static void main(String args[]){ 30 31 Frame = new action(); 32 33 Frame.setSize(900, 500);//ウィンドウのサイズ設定(X, Y) 34 Frame.setTitle("アクションゲーム");//ウィンドウのタイトル 35 Frame.setLocationRelativeTo(null);//ウィンドウを画面の中央に表示する 36 Frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//xで閉じるようにする 37 Frame.setVisible(true);//ウィンドウを可視化 38 39 } 40 41 action(){ 42 43 timer = new Timer(10, this);//タイマー間隔設定 44 Ktimer = new Timer(10, this);//タイマー間隔設定 45 46 Panel = new JPanel(); 47 Panel.setLayout(null);//レイアウトマネージャー無効化 48 49 PlayerIcon = new ImageIcon("./PlayerIcon.png");//プレイヤーの画像指定 50 BlockIcon = new ImageIcon("./BlockIcon.png");//ブロックの画像指定 51 52 Player = new JLabel(PlayerIcon);//プレイヤー画像設定 53 Player.setBounds(PlayerX, PlayerY, 20, 40);//プレイヤーの座標とサイズ設定 54 55 Block = new JLabel(BlockIcon);//ブロック画像設定 56 Block.setBounds(0, 442, 20, 20);//ブロックの座標とサイズ設定 57 58 Panel.add(Player);//プレイヤー画像追加 59 Panel.add(Block);//ブロック画像追加 60 61 Container contentPane = getContentPane();//??? 62 contentPane.add(Panel, BorderLayout.CENTER);//??? 63 64 timer.start();//タイマースタート 65 66 } 67 68 public void actionPerformed(ActionEvent e){//タイマーの処理 69 70 if(PlayerY <= 399){ 71 72 Jflag = true;//ジャンプフラグをtrueにする 73 74 }else{ 75 76 Jflag = false;//ジャンプフラグをfalseにする 77 78 } 79 80 if(Jflag == true){//もしジャンプフラグがtrueなら 81 82 PlayerY += 10;//プレイヤーのY座標を+10 83 Player.setBounds(PlayerX, PlayerY, 20, 40);//プレイヤーの座標再設定 84 Panel.repaint();//パネルを更新 85 86 if(PlayerY >= 399){ 87 88 Jflag = false; 89 timer.stop(); 90 91 } 92 93 } 94 95 if(UKflag == true){ 96 97 PlayerY -= 10;//プレイヤーのY座標を-10 98 Player.setBounds(PlayerX, PlayerY, 20, 40);//プレイヤーの座標再設定 99 Panel.repaint();//パネルを更新 100 101 if(PlayerY <= 359){ 102 103 UKflag = false; 104 Jflag = false; 105 timer.stop(); 106 107 } 108 109 } 110 111 } 112 113 protected void processKeyEvent(KeyEvent e){//キー入力の処理 114 115 if(e.getID() == KeyEvent.KEY_PRESSED){ 116 117 if(e.getKeyCode() == KeyEvent.VK_UP && Jflag == false){ 118 119 UKflag = true; 120 Jflag = true; 121 122 timer.start(); 123 124 System.out.println("UP"); 125 126 } 127 128 if(e.getKeyCode() == KeyEvent.VK_LEFT && Jflag == false){ 129 130 LKflag = true; 131 132 timer.start(); 133 134 System.out.println("LEFT"); 135 136 } 137 138 if(e.getKeyCode() == KeyEvent.VK_RIGHT && Jflag == false){ 139 140 RKflag = true; 141 142 timer.start(); 143 144 System.out.println("RIGHT"); 145 146 } 147 148 if(e.getKeyCode() == KeyEvent.VK_D && Dflag == true){ 149 150 System.out.println("\nJflag:" + Jflag); 151 System.out.println("UKflag:" + UKflag); 152 System.out.println("LKflag:" + LKflag); 153 System.out.println("RKflag:" + RKflag); 154 System.out.println("Dflag:" + Dflag); 155 System.out.println("PlayerX座標:" + PlayerX); 156 System.out.println("PlayerY座標:" + PlayerY + "\n"); 157 158 } 159 160 if(e.getKeyCode() == KeyEvent.VK_S){ 161 162 if(Dflag == false){ 163 164 Dflag = true; 165 System.out.println("デバック機能を有効にしました"); 166 167 } 168 169 } 170 171 if(e.getKeyCode() == KeyEvent.VK_E){ 172 173 Frame.dispose(); 174 System.out.println("正常に終了しました"); 175 176 } 177 178 } 179 180 } 181 182}

###前提・実現したいこと
ここに質問したいことを詳細に書いてください
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。

###発生している問題・エラーメッセージ

エラーメッセージ

###該当のソースコード

import javax.swing.*;//swingのimport import java.awt.*;//awtのimport import java.awt.event.*;//awtのeventのimport public class action extends JFrame implements ActionListener{ static action Frame;//Frame JPanel Panel;//Panel JLabel Player;//プレイヤーの画像が入ったJLabel JLabel Block;//ブロックの画像が入ったJLabel ImageIcon PlayerIcon;//プレイヤーの画像読み込み ImageIcon BlockIcon;//ブロックの画像読み込み Timer timer; Timer Ktimer; int PlayerX = 20;//プレイヤーのX座標 int PlayerY = 40;//プレイヤーのY座標 static boolean Jflag = false;//ジャンプフラグ static boolean UKflag = false;//ジャンプキーフラグ static boolean LKflag = false;//左移動キーフラグ static boolean RKflag = false;//右移動キーフラグ static boolean Dflag = false;//デバックフラグ public static void main(String args[]){ Frame = new action(); Frame.setSize(900, 500);//ウィンドウのサイズ設定(X, Y) Frame.setTitle("アクションゲーム");//ウィンドウのタイトル Frame.setLocationRelativeTo(null);//ウィンドウを画面の中央に表示する Frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//xで閉じるようにする Frame.setVisible(true);//ウィンドウを可視化 } action(){ timer = new Timer(10, this);//タイマー間隔設定 Ktimer = new Timer(10, this);//タイマー間隔設定 Panel = new JPanel(); Panel.setLayout(null);//レイアウトマネージャー無効化 PlayerIcon = new ImageIcon("./PlayerIcon.png");//プレイヤーの画像指定 BlockIcon = new ImageIcon("./BlockIcon.png");//ブロックの画像指定 Player = new JLabel(PlayerIcon);//プレイヤー画像設定 Player.setBounds(PlayerX, PlayerY, 20, 40);//プレイヤーの座標とサイズ設定 Block = new JLabel(BlockIcon);//ブロック画像設定 Block.setBounds(0, 442, 20, 20);//ブロックの座標とサイズ設定 Panel.add(Player);//プレイヤー画像追加 Panel.add(Block);//ブロック画像追加 Container contentPane = getContentPane();//??? contentPane.add(Panel, BorderLayout.CENTER);//??? timer.start();//タイマースタート } public void actionPerformed(ActionEvent e){//タイマーの処理 if(PlayerY <= 399){ Jflag = true;//ジャンプフラグをtrueにする }else{ Jflag = false;//ジャンプフラグをfalseにする } if(Jflag == true){//もしジャンプフラグがtrueなら PlayerY += 10;//プレイヤーのY座標を+10 Player.setBounds(PlayerX, PlayerY, 20, 40);//プレイヤーの座標再設定 Panel.repaint();//パネルを更新 if(PlayerY >= 399){ Jflag = false; timer.stop(); } } if(UKflag == true){ PlayerY -= 10;//プレイヤーのY座標を-10 Player.setBounds(PlayerX, PlayerY, 20, 40);//プレイヤーの座標再設定 Panel.repaint();//パネルを更新 if(PlayerY <= 359){ UKflag = false; Jflag = false; timer.stop(); } } } protected void processKeyEvent(KeyEvent e){//キー入力の処理 if(e.getID() == KeyEvent.KEY_PRESSED){ if(e.getKeyCode() == KeyEvent.VK_UP && Jflag == false){ UKflag = true; Jflag = true; timer.start(); System.out.println("UP"); } if(e.getKeyCode() == KeyEvent.VK_LEFT && Jflag == false){ LKflag = true; timer.start(); System.out.println("LEFT"); } if(e.getKeyCode() == KeyEvent.VK_RIGHT && Jflag == false){ RKflag = true; timer.start(); System.out.println("RIGHT"); } if(e.getKeyCode() == KeyEvent.VK_D && Dflag == true){ System.out.println("\nJflag:" + Jflag); System.out.println("UKflag:" + UKflag); System.out.println("LKflag:" + LKflag); System.out.println("RKflag:" + RKflag); System.out.println("Dflag:" + Dflag); System.out.println("PlayerX座標:" + PlayerX); System.out.println("PlayerY座標:" + PlayerY + "\n"); } if(e.getKeyCode() == KeyEvent.VK_S){ if(Dflag == false){ Dflag = true; System.out.println("デバック機能を有効にしました"); } } if(e.getKeyCode() == KeyEvent.VK_E){ Frame.dispose(); System.out.println("正常に終了しました"); } } } }

###試したこと
Jflagを↑を押したときにtrueにしたり
timerを止めてもう一度キーを押したときにスタートさせた

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2017/11/23 15:16

クラスは大文字開始のキャメルケース、クラス定数は大文字スネークケース、それ以外は小文字開始のキャメルケースで命名しましょう
退会済みユーザー

退会済みユーザー

2017/11/23 15:16

クラスなのか変数なのかがぱっとみわかりづらいから
m.ts10806

2017/11/24 00:41

同じ質問ですよね。https://teratail.com/questions/101726 どちらかを削除依頼だしてください。また、タイトルには要件を(できれば質問内容も伝わるように)書いてください。 https://teratail.com/help/question-tips#questionTips3-1 質問内容と関係のない質問テンプレート部分も残っているように見受けられますので調整してください。質問は投稿者が編集する事ができます。
umyu

2017/11/24 02:15

継ぎ接ぎだらけのコードになってしまっていると感じました。一度、どういうプログラムを作りたいのかを整理して、クラス化や関数化を行いプログラムコードをリファクタリングしてみてはどーでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問