2017-08-15 13 views
0

私はオブジェクトが別の静的オブジェクトまたはキャラクターに向かって来る単純なJAVAゲームを作ろうとしています。私が "スペース"ボタンを押すと、静的オブジェクトがジャンプして衝突を回避します。私は最初のオブジェクトを移動させるのに成功しましたが、静的オブジェクトをジャンプまたは移動させることはできませんでした。私はkeyeventを使ってみましたが、うまくいきませんでした。だから私はそれを動作させることができますか?私のコードで何が間違っているのかを指摘できますか?同じJPanel内の2つの異なるオブジェクトを同時に扱う方法は?

package jpanel; 

import java.awt.*; 
import javax.swing.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.KeyEvent; 

public class jp extends JPanel implements ActionListener{ 
    Timer t; 
    int x,y,k; 
    jp(){ 
     x=650; 
     k=0; 
     t=new Timer(5,this); 
     t.start(); 
    } 
    public void actionPerformed(ActionEvent e){ 
     x--; 
     //k++; 
     if(x==76){ 
      x=650; 
     } 
     repaint(); 
    } 

    public void keyPressed(KeyEvent e){ 
     int key=e.getKeyCode(); 
      if(key == KeyEvent.VK_SPACE){ 
       k++; 
       /* if(k>300){ 
        k=0; 
       }*/ 
       repaint(); 
      } 
     } 

    public void paintComponent(Graphics g){ 
     super.paintComponent(g); 
     this.setBackground(Color.black); 
     g.setColor(Color.blue); 
     g.fillRect(x,400,50,50);//moving object 
     g.setColor(Color.red); 
     //Static Object 
     g.fillRect(30, 350-k, 45, 70);//static_body 
     g.setColor(Color.yellow); 
     g.fillOval(28, 310-k, 40, 40);//static_head 
     g.setColor(Color.green); 
     g.fillRect(30, 420-k, 10, 35);//static_leg1 
     g.fillRect(65, 420-k, 10, 35);//static_leg2 
     g.setColor(Color.blue); 
     g.fillRect(35, 350-k, 10, 45);//static_hand 
     g.setColor(Color.black); 
     g.fillOval(55, 320-k, 7, 7);//static_eye 
    } 
} 

public class Jpanel extends JFrame { 


    public static void main(String[] args) { 
     jp p=new jp(); 

     JFrame j=new JFrame("TEST_CASE-1"); 
     j.add(p); 
     j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     j.setSize(700,500); 
     j.setVisible(true); 
    } 

} 
+0

私が欲しいのにジャンプするには、私の主な関心事は静的オブジェクトを動かすことです。したがって、コードはまだジャンプするのに適していません。 – ryhn

答えて

0

ない(たとえば、コンストラクタで)あなたがやろうとしているが、あなたがキーイベントを聞きたい場合は、あなたがリスナーを登録する必要がありますかわから:

addKeyListener(new KeyAdapter() { 
    public void keyPressed(KeyEvent evt) { 
     ... 
    } 
); 
+1

'requestFocusInWindow()'も必要です。おそらくキーバインドを使用する方がよいでしょう。 – trashgod

関連する問題