2017-08-15 2 views
0

Ich versuche ein einfaches JAVA-Spiel zu machen, bei dem ein Objekt auf ein anderes statisches Objekt oder Charakter zukommt und wenn ich die "Leertaste" drücke, springt das statische Objekt und vermeidet die Kollision. Es war mir gelungen, das erste Objekt in Bewegung zu bringen, aber ich konnte das statische Objekt nicht springen oder bewegen. Ich habe versucht, keyevent zu verwenden, aber es hat nicht funktioniert. Wie kann ich es zum Laufen bringen? Oder können Sie darauf hinweisen, was ich in meinem Code falsch mache?Wie werden zwei verschiedene Objekte im selben JPanel gleichzeitig behandelt?

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

obwohl ich will Um zu springen, ist es mein Hauptanliegen, das statische Objekt bewegen zu lassen. Der Code ist also noch nicht zum Springen geeignet. – ryhn

Antwort

0

nicht sicher, was Sie zu tun versuchen, aber wenn Sie auf wichtige Ereignisse hören möchten, müssen Sie einen Listener registrieren (im Konstruktor, zum Beispiel):

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

Benötigt auch 'requestFocusInWindow()'; wahrscheinlich besser, Schlüsselbindung zu verwenden. – trashgod

Verwandte Themen