2011-12-02 15 views
0

私はこれらのリンクを見て、どれも私を助けませんでした。私はKeyListenerとRunnalbeを使ってJFrameとゲームをしています。メッセージは、すべてが正常に見える表示、KeyListenerが初めて応答しませんでしたか?

  • 私は私のプログラムを起動すると、ウィンドウが立ち上がる:私は私が過去に行ったゲームで、それに問題があったことがありませんが、今イムが話しHERESに何を。
  • キーが動作しません -iウィンドウを閉じます - 2回目はすべて開いています。私は仮想マシンをリセットし、ここで1
  • 戻って広場に、再び

を試してみてください-if は私のコンストラクタです:

public Game() 
{ 
    super("ZMan"); 
    addKeyListener(this); 
    setSize(800,600); 
    setVisible(true); 


    i = createImage(800,600); 
    b = i.getGraphics(); 
    makeLevel(); 
    souls = new Image[3]; 
    particles = new double[20][3]; 
    pc = 10; 
    pH = 20; 
    player = new Image[8]; 
    nme = new Image[8]; 
    showMessage = false; 
    try 
    { 
     bg = ImageIO.read(new File("bg.png")); 
     abg = ImageIO.read(new File("abg.png")); 
     bil = ImageIO.read(new File("buildingP.png")); 
     bilP = ImageIO.read(new File("building.png")); 
     message = ImageIO.read(new File("./system/messageBG.png")); 

     souls[2] = ImageIO.read(new File("sR.png")); 
     souls[1] = ImageIO.read(new File("sG.png")); 
     souls[0] = ImageIO.read(new File("sB.png")); 
     rem = souls[0]; 
     //player 
     player[0] = ImageIO.read(new File("./player/normal.png")); 
     player[1] = ImageIO.read(new File("./player/pBloop.png")); 
     player[2] = ImageIO.read(new File("./player/pscorp.png")); 
     player[3] = ImageIO.read(new File("./player/pSqui.png")); 
     player[4] = ImageIO.read(new File("./player/pCato.png")); 
     player[5] = ImageIO.read(new File("./player/pChubs.png")); 
     player[6] = ImageIO.read(new File("./player/pPluckers.png")); 
     player[7] = ImageIO.read(new File("./player/pSpooky.png")); 
     gate = ImageIO.read(new File("./gate.png")); 
     levelUp = ImageIO.read(new File("./system/levelUp.png")); 
     xL = ImageIO.read(new File("./player/x.png")); 
     /* 
     nme[0] = ImageIO.read(new File("./enemies/bloop.png")); 
     nme[1] = ImageIO.read(new File("./enemies/bloop.png")); 
     nme[2] = ImageIO.read(new File("./enemies/scorp.png")); 
     nme[3] = ImageIO.read(new File("./enemies/squi.png")); 
     nme[4] = ImageIO.read(new File("./enemies/cato.png")); 
     */ 
     nme[0] = Toolkit.getDefaultToolkit().createImage("./enemies/bloob.png"); 
     nme[1] = Toolkit.getDefaultToolkit().createImage("./enemies/bloob.png"); 
     nme[2] = Toolkit.getDefaultToolkit().createImage("./enemies/scorp.png"); 
     nme[3] = Toolkit.getDefaultToolkit().createImage("./enemies/squi.png"); 
     nme[4] = Toolkit.getDefaultToolkit().createImage("./enemies/cato.png"); 
     nme[5] = Toolkit.getDefaultToolkit().createImage("./enemies/chubs.png"); 
     nme[6] = Toolkit.getDefaultToolkit().createImage("./enemies/pluckers.png"); 
     nme[7] = Toolkit.getDefaultToolkit().createImage("./enemies/spooky.png"); 
    } 
    catch(Exception e){e.printStackTrace();} 
    powerT = new String[8]; 
    powerT[0] = "You went back to normal"; 
    powerT[1] = "You are now Bloop!"; 
    powerT[2] = "You are now Scorp!"; 
    powerT[3] = "You are now Squi!"; 
    powerT[4] = "You are now Cato!"; 
    powerT[5] = "You are now Chubs!"; 
    powerT[6] = "You are now Pluckers"; 
    powerT[7] = "You are now Spooky"; 
    startAim(); 
    //music = new Music("./system/music/0.wav"); 
    t.start(); 
} 

はnyone問題を知っていますか?

+1

これはたくさんのコードです。 [SSCCE](http://sscce.org/)を投稿してみてください。 – Jeffrey

+1

@Jeffrey私は、73行のコードが「たくさんのコード」であることに同意しませんが、SSCCEを掲示するという考えで+1します。そしてSSCCEを準備するときはErikに:1)ネット上の画像にホットリンクするか、コードで生成する。 2)すべての配列( 'souls'、' player'、 'nme'、' powerT'など)を2つの要素だけに減らします。 –

+0

ええ、はい、私はそれらを含んでいるので、何かを変えるかもしれません(おそらくそうではありません) –

答えて

0

これはダムに聞こえるかもしれませんが、それはより健全性のチェックです。主な方法を確認してください。私は、最初にウィンドウが起動され、Gameへのコンストラクタが実際に呼び出されていることを確認して、デバッグのステップスルーを行うことをお勧めします。コンストラクタに関する何も悪いと思われます(私に)のオブジェクトがホースされる可能性があります。

もしそうでなければ、私はあなたを助けることができません。

+0

それがない場合は、画像が画面に表示されないため、呼び出されます。 –

3

"キーボードイベントを発生させるには、コンポーネントにキーボードフォーカスが必要です。" - How to Write a Key Listener。私は、関連するコンポーネントが2度目のフォーカスを持っていると推測しています。 requestFocusInWindow()を試してみるか、好ましくはHow to Use Key Bindingsをご覧ください。

補足:キーバインドの例がhereです。

+0

KeyBindingsが正しいですし、正しい方法+1 – mKorbel

+0

キーバインディングwouldnt助けてください。私はもう試した。焦点は問題ではありません。私はそれにコードの行を追加しました。 –

+0

'requestFocusInWindow()'の使い方について上のリンクを追加しました。 「ウィンドウが最初に起動されたときに、特定のコンポーネントがフォーカスを得ることを保証する」を探します。 – trashgod

関連する問題