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

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

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

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

Q&A

解決済

2回答

194閲覧

キー入力がされてない

Alpa

総合スコア80

Java

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

0グッド

0クリップ

投稿2017/12/30 19:48

キーを入力したら左右に移動したりジャンプしたり
させたいのですがキー入力がされていなかったのですが
原因がわかりません
どうしたらいいでしょうか
ご回答お願い致します

java

1import javax.swing.*; 2import java.awt.*; 3import java.awt.event.*; 4 5class action{ 6 7 public static void main(String args[]){ 8 9 MyFrame mf = new MyFrame("アクションゲーム"); 10 mf.setVisible(true); 11 12 } 13 14} 15 16class MyFrame extends Frame implements ActionListener, MouseMotionListener, MouseListener{ 17 18 int PX = 0; 19 int PY = 0; 20 21 int PlayerX = PX; 22 int PlayerY = PY; 23 24 int x1 = 0; 25 int y1 = 0; 26 int x2 = 100; 27 int y2 = 100; 28 29 boolean flyFlag = true; 30 31 boolean UFlag = false; 32 boolean DFlag = false; 33 boolean LFlag = false; 34 boolean RFlag = false; 35 36 Timer alltimer; 37 38 MyFrame(String title){ 39 40 this.setSize(900, 500); 41 this.setTitle(title); 42 this.setLocationRelativeTo(null); 43 44 this.addWindowListener(new WindowAdapter(){ 45 46 public void windowClosing(WindowEvent we){ 47 48 System.exit(0); 49 50 } 51 52 }); 53 54 addMouseMotionListener(this); 55 addMouseListener(this); 56 57 alltimer = new Timer(1, this); 58 59 alltimer.start(); 60 61 } 62 63 public void paint(Graphics g){ 64 65 int BlockX = 50; 66 int BlockY = 450; 67 68 g.setColor(Color.red); 69 70 g.fillRect(PlayerX, PlayerY, 50, 100); 71 72 g.setColor(new Color(0, 255, 255)); 73 74 g.fillRect(BlockX - 50, BlockY, 50, 50); 75 g.fillRect(BlockX * 1, BlockY, 50, 50); 76 g.fillRect(BlockX * 2, BlockY, 50, 50); 77 g.fillRect(BlockX * 3, BlockY, 50, 50); 78 g.fillRect(BlockX * 4, BlockY, 50, 50); 79 g.fillRect(BlockX * 5, BlockY, 50, 50); 80 g.fillRect(BlockX * 6, BlockY, 50, 50); 81 g.fillRect(BlockX * 7, BlockY, 50, 50); 82 g.fillRect(BlockX * 8, BlockY, 50, 50); 83 g.fillRect(BlockX * 9, BlockY, 50, 50); 84 g.fillRect(BlockX * 10, BlockY, 50, 50); 85 g.fillRect(BlockX * 11, BlockY, 50, 50); 86 g.fillRect(BlockX * 12, BlockY, 50, 50); 87 g.fillRect(BlockX * 13, BlockY, 50, 50); 88 g.fillRect(BlockX * 14, BlockY, 50, 50); 89 g.fillRect(BlockX * 15, BlockY, 50, 50); 90 g.fillRect(BlockX * 16, BlockY, 50, 50); 91 g.fillRect(BlockX * 17, BlockY, 50, 50); 92 g.fillRect(BlockX * 18, BlockY, 50, 50); 93 g.fillRect(BlockX * 19, BlockY - 50, 50, 50); 94 95 } 96 97 public void actionPerformed(ActionEvent e){ 98 99 if(PlayerY >= 0 && PlayerY <= 350 && flyFlag == true){ 100 101 PlayerY += 9; 102 repaint(); 103 104 flyFlag = true; 105 106 }else if(PlayerY >= 350){ 107 108 flyFlag = false; 109 110 } 111 112 if(UFlag == true && flyFlag == false){ 113 114 PlayerY -= 50; 115 repaint(); 116 117 } 118 119 if(DFlag == true){ 120 121 System.out.println(DFlag); 122 123 } 124 125 if(RFlag == true && PlayerX <= 850){ 126 127 PlayerX += 10; 128 repaint(); 129 130 } 131 132 if(LFlag == true && PlayerX >= 50){ 133 134 PlayerX -= 10; 135 repaint(); 136 137 } 138 139 } 140 141 protected void processKeyEvent(java.awt.event.KeyEvent e){//キーイベントの関数 142 143 if(e.getID() == java.awt.event.KeyEvent.KEY_PRESSED){ 144 145 if(e.getKeyCode() == java.awt.event.KeyEvent.VK_UP){ 146 147 UFlag = true; 148 149 }else{ 150 151 UFlag = false; 152 153 } 154 155 if(e.getKeyCode() == java.awt.event.KeyEvent.VK_DOWN){ 156 157 DFlag = true; 158 159 }else{ 160 161 DFlag = false; 162 163 } 164 165 if(e.getKeyCode() == java.awt.event.KeyEvent.VK_RIGHT){ 166 167 RFlag = true; 168 169 }else{ 170 171 RFlag = false; 172 173 } 174 175 if(e.getKeyCode() == java.awt.event.KeyEvent.VK_LEFT){ 176 177 LFlag = true; 178 179 }else{ 180 181 LFlag = false; 182 183 } 184 185 } 186 187 } 188 189 public void mouseMoved(MouseEvent e){ 190 191 Point point = e.getPoint(); 192 PX = point.x; 193 PY = point.y; 194 195 } 196 197 public void mouseDragged(MouseEvent e){ 198 199 } 200 201 public void mouseClicked(MouseEvent e){ 202 203 } 204 205 public void mouseEntered(MouseEvent e){ 206 207 } 208 209 public void mouseExited(MouseEvent e){ 210 211 } 212 213 public void mousePressed(MouseEvent e){ 214 215 } 216 public void mouseReleased(MouseEvent e){ 217 218 } 219 220}

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

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

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

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

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

guest

回答2

0

ベストアンサー

java

1//import省略 2class action{ 3 public static void main(String args[]){ 4 MyFrame mf = new MyFrame("アクションゲーム"); 5 mf.setVisible(true); 6 } 7} 8class MyFrame extends Frame implements ActionListener, MouseMotionListener, MouseListener{ 9 int PX = 0; 10 int PY = 0; 11 int PlayerX = PX; 12 int PlayerY = PY; 13 int x1 = 0; 14 int y1 = 0; 15 int x2 = 100; 16 int y2 = 100; 17 boolean flyFlag = true; 18 boolean UFlag = false; 19 boolean DFlag = false; 20 boolean LFlag = false; 21 boolean RFlag = false; 22 Timer alltimer; 23 MyFrame(String title){ 24 this.setSize(900, 500); 25 this.setTitle(title); 26 this.setLocationRelativeTo(null); 27 this.addWindowListener(new WindowAdapter(){ 28 public void windowClosing(WindowEvent we){ 29 System.exit(0); 30 } 31 }); 32 //追加 33 enableEvents(AWTEvent.KEY_EVENT_MASK); 34 addMouseMotionListener(this); 35 addMouseListener(this); 36 alltimer = new Timer(1, this); 37 alltimer.start(); 38 } 39 public void paint(Graphics g){ 40 int BlockX = 50; 41 int BlockY = 450; 42 g.setColor(Color.red); 43 g.fillRect(PlayerX, PlayerY, 50, 100); 44 g.setColor(new Color(0, 255, 255)); 45 g.fillRect(BlockX - 50, BlockY, 50, 50); 46 //ループしよう? 47 g.fillRect(BlockX * 1, BlockY, 50, 50); 48 g.fillRect(BlockX * 2, BlockY, 50, 50); 49 g.fillRect(BlockX * 3, BlockY, 50, 50); 50 g.fillRect(BlockX * 4, BlockY, 50, 50); 51 g.fillRect(BlockX * 5, BlockY, 50, 50); 52 g.fillRect(BlockX * 6, BlockY, 50, 50); 53 g.fillRect(BlockX * 7, BlockY, 50, 50); 54 g.fillRect(BlockX * 8, BlockY, 50, 50); 55 g.fillRect(BlockX * 9, BlockY, 50, 50); 56 g.fillRect(BlockX * 10, BlockY, 50, 50); 57 g.fillRect(BlockX * 11, BlockY, 50, 50); 58 g.fillRect(BlockX * 12, BlockY, 50, 50); 59 g.fillRect(BlockX * 13, BlockY, 50, 50); 60 g.fillRect(BlockX * 14, BlockY, 50, 50); 61 g.fillRect(BlockX * 15, BlockY, 50, 50); 62 g.fillRect(BlockX * 16, BlockY, 50, 50); 63 g.fillRect(BlockX * 17, BlockY, 50, 50); 64 g.fillRect(BlockX * 18, BlockY, 50, 50); 65 g.fillRect(BlockX * 19, BlockY - 50, 50, 50); 66 } 67 public void actionPerformed(ActionEvent e){ 68 if(PlayerY >= 0 && PlayerY <= 350 && flyFlag == true){ 69 PlayerY += 9; 70 repaint(); 71 flyFlag = true; 72 }else if(PlayerY >= 350){ 73 flyFlag = false; 74 } 75 if(UFlag == true && flyFlag == false){ 76 PlayerY -= 50; repaint(); 77 } 78 if(DFlag == true){ 79 System.out.println(DFlag); 80 } 81 if(RFlag == true && PlayerX <= 850){ 82 PlayerX += 10; repaint(); 83 } 84 if(LFlag == true && PlayerX >= 50){ 85 PlayerX -= 10; repaint(); 86 } 87 } 88 protected void processKeyEvent(java.awt.event.KeyEvent e){//キーイベントの関数 89 if(e.getID() == java.awt.event.KeyEvent.KEY_PRESSED){ 90 if(e.getKeyCode() == java.awt.event.KeyEvent.VK_UP){ 91 UFlag = true; 92 }else{ 93 UFlag = false; 94 } 95 if(e.getKeyCode() == java.awt.event.KeyEvent.VK_DOWN){ 96 DFlag = true; 97 }else{ 98 DFlag = false; 99 } 100 if(e.getKeyCode() == java.awt.event.KeyEvent.VK_RIGHT){ 101 RFlag = true; 102 }else{ 103 RFlag = false; 104 } 105 if(e.getKeyCode() == java.awt.event.KeyEvent.VK_LEFT){ 106 LFlag = true; 107 }else{ 108 LFlag = false; 109 } 110 } 111 } 112 public void mouseMoved(MouseEvent e){ 113 Point point = e.getPoint(); 114 PX = point.x; 115 PY = point.y; 116 } 117 public void mouseDragged(MouseEvent e){ } 118 public void mouseClicked(MouseEvent e){ } 119 public void mouseEntered(MouseEvent e){ } 120 public void mouseExited(MouseEvent e){ } 121 public void mousePressed(MouseEvent e){ } 122 public void mouseReleased(MouseEvent e){ } 123}

投稿2017/12/31 02:19

編集2017/12/31 02:25
tignear

総合スコア260

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

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

0

下記APIリファレンスを注意深く読んでみると原因がわかります。

https://docs.oracle.com/javase/jp/8/docs/api/java/awt/Component.html#processKeyEvent-java.awt.event.KeyEvent-

このコンポーネントに対してキー・イベントが使用可能でない場合、このメソッドは呼び出されません。キー・イベントは、次のいずれかの場合に使用可能になります。

KeyListenerオブジェクトがaddKeyListenerを使用して登録されている。
enableEventsによってキー・イベントが使用可能になっている。

本件ではKeyListenerではなく直接processKeyEventをオーバーライドしているため、enableEventsを用いてswingに対し「このコンポーネント(=JFrame)にキーイベントを配送してね」と言っておかなければなりません。

上記のAPIリファレンス「processKeyEvent」の下の方のリンクを辿ると必要な情報にたどり着けます。これらを参照するとJFrame(の派生クラス)のコンストラクターの中で
enableEvents(AWTEvents.KEY_EVENT_MASK);
とやっておけばよさそうということがわかってきます。

APIリファレンスをよく読むとしかるべき情報が得られる(こともある)という例です。逆に読まなければ正しいコードを書くことは難しくなります。

https://docs.oracle.com/javase/jp/8/docs/api/java/awt/Component.html#enableEvents-long-
https://docs.oracle.com/javase/jp/8/docs/api/java/awt/AWTEvent.html

投稿2017/12/31 02:18

編集2017/12/31 02:20
KSwordOfHaste

総合スコア18394

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問