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

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

ただいまの
回答率

90.51%

  • Java

    13789questions

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

キー入力がされてない

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 256

Alpa

score 26

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

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

class action{

    public static void main(String args[]){

        MyFrame mf = new MyFrame("アクションゲーム");
        mf.setVisible(true);

    }

}

class MyFrame extends Frame implements ActionListener, MouseMotionListener, MouseListener{

    int PX = 0;
    int PY = 0;

    int PlayerX = PX;
    int PlayerY = PY;

    int x1 = 0;
    int y1 = 0;
    int x2 = 100;
    int y2 = 100;

    boolean flyFlag = true;

    boolean UFlag = false;
    boolean DFlag = false;
    boolean LFlag = false;
    boolean RFlag = false;

    Timer alltimer;

    MyFrame(String title){

        this.setSize(900, 500);
        this.setTitle(title);
        this.setLocationRelativeTo(null);

        this.addWindowListener(new WindowAdapter(){

            public void windowClosing(WindowEvent we){

                System.exit(0);

            }

        });

        addMouseMotionListener(this);
        addMouseListener(this);

        alltimer = new Timer(1, this);

        alltimer.start();

    }

    public void paint(Graphics g){

        int BlockX = 50;
        int BlockY = 450;

        g.setColor(Color.red);

        g.fillRect(PlayerX, PlayerY, 50, 100);

        g.setColor(new Color(0, 255, 255));

        g.fillRect(BlockX - 50, BlockY, 50, 50);
        g.fillRect(BlockX * 1, BlockY, 50, 50);
        g.fillRect(BlockX * 2, BlockY, 50, 50);
        g.fillRect(BlockX * 3, BlockY, 50, 50);
        g.fillRect(BlockX * 4, BlockY, 50, 50);
        g.fillRect(BlockX * 5, BlockY, 50, 50);
        g.fillRect(BlockX * 6, BlockY, 50, 50);
        g.fillRect(BlockX * 7, BlockY, 50, 50);
        g.fillRect(BlockX * 8, BlockY, 50, 50);
        g.fillRect(BlockX * 9, BlockY, 50, 50);
        g.fillRect(BlockX * 10, BlockY, 50, 50);
        g.fillRect(BlockX * 11, BlockY, 50, 50);
        g.fillRect(BlockX * 12, BlockY, 50, 50);
        g.fillRect(BlockX * 13, BlockY, 50, 50);
        g.fillRect(BlockX * 14, BlockY, 50, 50);
        g.fillRect(BlockX * 15, BlockY, 50, 50);
        g.fillRect(BlockX * 16, BlockY, 50, 50);
        g.fillRect(BlockX * 17, BlockY, 50, 50);
        g.fillRect(BlockX * 18, BlockY, 50, 50);
        g.fillRect(BlockX * 19, BlockY - 50, 50, 50);

    }

    public void actionPerformed(ActionEvent e){

        if(PlayerY >= 0 && PlayerY <= 350 && flyFlag == true){

            PlayerY += 9;
            repaint();

            flyFlag = true;

        }else if(PlayerY >= 350){

            flyFlag = false;

        }

        if(UFlag == true && flyFlag == false){

            PlayerY -= 50;
            repaint();

        }

        if(DFlag == true){

            System.out.println(DFlag);

        }

        if(RFlag == true && PlayerX <= 850){

            PlayerX += 10;
            repaint();

        }

        if(LFlag == true && PlayerX >= 50){

            PlayerX -= 10;
            repaint();

        }

    }

    protected void processKeyEvent(java.awt.event.KeyEvent e){//キーイベントの関数

        if(e.getID() == java.awt.event.KeyEvent.KEY_PRESSED){

            if(e.getKeyCode() == java.awt.event.KeyEvent.VK_UP){

                UFlag = true;

            }else{

                UFlag = false;

            }

            if(e.getKeyCode() == java.awt.event.KeyEvent.VK_DOWN){

                DFlag = true;

            }else{

                DFlag = false;

            }

            if(e.getKeyCode() == java.awt.event.KeyEvent.VK_RIGHT){

                RFlag = true;

            }else{

                RFlag = false;

            }

            if(e.getKeyCode() == java.awt.event.KeyEvent.VK_LEFT){

                LFlag = true;

            }else{

                LFlag = false;

            }

        }

    }

    public void mouseMoved(MouseEvent e){

        Point point = e.getPoint();
        PX = point.x;
        PY = point.y;

    }

    public void mouseDragged(MouseEvent e){

    }

    public void mouseClicked(MouseEvent e){

    }

    public void mouseEntered(MouseEvent e){

    }

    public void mouseExited(MouseEvent e){

    }

    public void mousePressed(MouseEvent e){

    }
    public void mouseReleased(MouseEvent e){

    }

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

//import省略
class action{
  public static void main(String args[]){
    MyFrame mf = new MyFrame("アクションゲーム");
    mf.setVisible(true);  
  } 
} 
class MyFrame extends Frame implements ActionListener, MouseMotionListener, MouseListener{
 int PX = 0;
 int PY = 0;
 int PlayerX = PX;
 int PlayerY = PY;
 int x1 = 0;
 int y1 = 0;
 int x2 = 100;
 int y2 = 100;
 boolean flyFlag = true;
 boolean UFlag = false;
 boolean DFlag = false;
 boolean LFlag = false;
 boolean RFlag = false;
 Timer alltimer;
 MyFrame(String title){
  this.setSize(900, 500);
  this.setTitle(title); 
  this.setLocationRelativeTo(null);  
  this.addWindowListener(new WindowAdapter(){
    public void windowClosing(WindowEvent we){
     System.exit(0);
    }
  });
  //追加
  enableEvents(AWTEvent.KEY_EVENT_MASK);
  addMouseMotionListener(this);
  addMouseListener(this); 
  alltimer = new Timer(1, this);
  alltimer.start();
 }
 public void paint(Graphics g){
  int BlockX = 50;
  int BlockY = 450;
  g.setColor(Color.red); 
  g.fillRect(PlayerX, PlayerY, 50, 100);
  g.setColor(new Color(0, 255, 255));
  g.fillRect(BlockX - 50, BlockY, 50, 50);
  //ループしよう?
  g.fillRect(BlockX * 1, BlockY, 50, 50); 
  g.fillRect(BlockX * 2, BlockY, 50, 50);
  g.fillRect(BlockX * 3, BlockY, 50, 50); 
  g.fillRect(BlockX * 4, BlockY, 50, 50);
  g.fillRect(BlockX * 5, BlockY, 50, 50);
  g.fillRect(BlockX * 6, BlockY, 50, 50);
  g.fillRect(BlockX * 7, BlockY, 50, 50); 
  g.fillRect(BlockX * 8, BlockY, 50, 50); 
  g.fillRect(BlockX * 9, BlockY, 50, 50); 
  g.fillRect(BlockX * 10, BlockY, 50, 50);
  g.fillRect(BlockX * 11, BlockY, 50, 50);
  g.fillRect(BlockX * 12, BlockY, 50, 50); 
  g.fillRect(BlockX * 13, BlockY, 50, 50); 
  g.fillRect(BlockX * 14, BlockY, 50, 50);
  g.fillRect(BlockX * 15, BlockY, 50, 50);
  g.fillRect(BlockX * 16, BlockY, 50, 50);
  g.fillRect(BlockX * 17, BlockY, 50, 50);
  g.fillRect(BlockX * 18, BlockY, 50, 50);
  g.fillRect(BlockX * 19, BlockY - 50, 50, 50); 
 }
 public void actionPerformed(ActionEvent e){
  if(PlayerY >= 0 && PlayerY <= 350 && flyFlag == true){
   PlayerY += 9;
   repaint();
   flyFlag = true; 
  }else if(PlayerY >= 350){
   flyFlag = false; 
  }
  if(UFlag == true && flyFlag == false){
   PlayerY -= 50; repaint();
  }
  if(DFlag == true){
   System.out.println(DFlag); 
  }
  if(RFlag == true && PlayerX <= 850){
   PlayerX += 10; repaint();
  } 
  if(LFlag == true && PlayerX >= 50){
   PlayerX -= 10; repaint();
  } 
 } 
 protected void processKeyEvent(java.awt.event.KeyEvent e){//キーイベントの関数
  if(e.getID() == java.awt.event.KeyEvent.KEY_PRESSED){
   if(e.getKeyCode() == java.awt.event.KeyEvent.VK_UP){
     UFlag = true; 
   }else{
    UFlag = false;
   }
   if(e.getKeyCode() == java.awt.event.KeyEvent.VK_DOWN){
    DFlag = true;
   }else{
    DFlag = false;
   }
   if(e.getKeyCode() == java.awt.event.KeyEvent.VK_RIGHT){
    RFlag = true; 
   }else{
    RFlag = false;
   }
   if(e.getKeyCode() == java.awt.event.KeyEvent.VK_LEFT){
    LFlag = true; 
   }else{ 
    LFlag = false;
   } 
  } 
 }
 public void mouseMoved(MouseEvent e){
  Point point = e.getPoint(); 
  PX = point.x; 
  PY = point.y; 
 }
 public void mouseDragged(MouseEvent e){ }
 public void mouseClicked(MouseEvent e){ } 
 public void mouseEntered(MouseEvent e){ } 
 public void mouseExited(MouseEvent e){ } 
 public void mousePressed(MouseEvent e){ }
 public void mouseReleased(MouseEvent e){ } 
}

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.51%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Java

    13789questions

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