2016-08-13 9 views
0

いくつかの小さなことをした後、私はテキストベースのRPGで私の手を試してみることに決めました。私は再び勉強しているので、私はコンソールを使用しています。しかし、私はこの時点で問題に遭遇しています。私は自分のメインメソッドを保持する私のGameクラスを持っていますが、その1つはPlayerクラスです。私のプレーヤーのクラスの中で私はこれがあります。あるクラスから別のクラスへKeyEventメソッドを呼び出すにはどうすればよいですか?

public void playerControls(KeyEvent e) 
{ 
    int key = e.getKeyCode(); 

    if (key == KeyEvent.VK_W) 
    { 
     System.out.println("Up"); 
    } 

    if (key == KeyEvent.VK_A) 
    { 
     System.out.println("Left"); 
    } 

    if (key == KeyEvent.VK_S) 
    { 
     System.out.println("Down"); 
    } 

    if (key == KeyEvent.VK_D) 
    { 
     System.out.println("Right"); 
    } 
    if (key == KeyEvent.VK_I) 
    { 
     System.out.println("Inventory"); 
    } 
    if (key == KeyEvent.VK_O) 
    { 
     System.out.println("Options"); 
    } 
    if (key == KeyEvent.VK_M) 
    { 
     System.out.println("Map"); 
    } 
    if (key == KeyEvent.VK_C) 
    { 
     System.out.println("Character"); 

    } 
} 

その後、私のゲームクラスの内部で、私は私のメインメソッド内で持っている:

//START OF GAME  
    do 
    { 

    player.playerControls(e); 

    validInput = true; 


    System.out.println("!!!!!!!!!!enter the intro story here!!!!!!!!!"); 



    } while (gameRun); 



} 

私が午前問題は、私はeがすることはできませんというエラーを取得するということです私はnullとして私はまたエラーをスローとして実行するときに変数に解決されます。私の質問は、私がゲームを実行してユーザーの入力を可能にするために、私は(このように/正しく "適切に")プレイヤークラスのplayerControlを私のGameクラスに呼び出す方法です。ご回答ありがとうございます。素晴らしい一日を過ごしてください:)

+1

'KeyEvent'は' KeyListener'によって生成されます。あなたは実際に 'KeyEvent'を得るためにリスナーをコンソールに登録しなければなりません。 –

+0

お返事ありがとうございます。だから本質的にコンソールはユーザーの入力を探しているだろうし、そうするためにコンソールを設定しなければならないだろう。コンソールが入力を感知した場合、KeyEventがどうなるか? – skinward

+0

あなたは混乱しています:KeyEventとコンソールは混在しないため、前者はイベントドリブンユーザーインターフェイスGUIライブラリの一部であり、後者は線形プログラミングユーザーインターフェイスの一部です。あなたが単純なコンソールプログラミングをしているなら、答えはKeyEventsを使わないことです。ほとんどのチュートリアルで表示されるように、BufferedReaderまたはScannerを使用してください。 –

答えて

0

あなたの方法はKeyEventを必要とするのではなく、単にコンソール入力を読むことができます。

do { 
    String input = System.console().readLine(); 
    //Change playerControls(KeyEvent e) to playerControls(String e) 
    player.playerControls(input); 
    validInput = true; 
    System.out.println("!!!!!!!!!!enter the intro story here!!!!!!!!!"); 
} while (gameRun); 

はい代わりStringの単一Charでこれを行うための方法があるが、それはスターターのための私の意見では十分に簡単ではありません。

今、あなたはまた、あなたのplayerControlsがさらに-method変更する必要があります:

public void playerControls(String e){   
    switch(e){ 
     case "Up": system.out.println("Up"); 
       break; 
     //Do so with all controls 
    } 

の代わりに(あなたがbreakを忘れた場合に発生します)、すべての以下のケースの実行を停止することですbreakあなたがreturn;を使用することができますが。

関連する問題