2017-01-30 2 views
-2

Mein Programm hat 3 Java-Dateien, nämlich Frame, Dude (enthält das Zeichen) und Board (die den actionListener implementiert). Mein Programm wirft keinen Fehler und die Bilder (Hintergrund und Zeichen) werden gut wiedergegeben. Aber der Charakter bewegt sich nicht vorwärts.Warum bewegt sich der Charakter in meinem 2D-Spiel nicht?


import javax.swing.*; 

public class Frame { 
    public static void main(String[] args){ 
     JFrame frame= new JFrame("2D Game"); 
     frame.add(new Board()); 
     frame.setVisible(true); 
     frame.setSize(1200, 600); 
    } 
} 

import java.awt.*; 
import java.awt.event.KeyEvent; 

import javax.swing.*; 

public class Dude { 
    int x, dx, y; 
    Image still; 

    public Dude(){ 
     ImageIcon i = new ImageIcon("/home/amitabh/Pictures/man1.jpg"); 
     still= i.getImage(); 
     x=10; 
     y=172; 
     } 

    public void move(){ 
     x=x+dx; 
    } 

    public int getX(){ 
     return x; 
    } 

    public int getY(){ 
     return y; 
    } 

    public Image getImage(){ 
     return still; 
    } 

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

     if(key== KeyEvent.VK_LEFT); 
     dx= -1; 

     if(key== KeyEvent.VK_RIGHT); 
     dx= 1; 
    } 

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

     if(key==KeyEvent.VK_LEFT); 
     dx=0; 

     if(key==KeyEvent.VK_RIGHT); 
     dx=0; 
    } 
} 

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

public class Board extends JPanel implements ActionListener{ 
    Image img; 
    Timer time; 
    Dude p; 

    public Board(){ 
     p= new Dude(); 
     addKeyListener(new AL()); 
     setFocusable(true); 
     ImageIcon i= new ImageIcon("/home/amitabh/Pictures/game1.png"); 
     img= i.getImage(); 
     time= new Timer(5,this); 
     time.start(); 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     p.move(); 
     repaint(); 

    } 

    public void paint(Graphics g){ 
     super.paint(g); 
     Graphics2D g2d= (Graphics2D)g; 

     g2d.drawImage(img, 0,0, null); 
     g2d.drawImage(p.getImage(), p.getX(), p.getY(), null); 
    } 

    public class AL extends KeyAdapter{ 
     public void keyReleased(KeyEvent e){ 
      p.keyReleased(e); 
     } 
     public void KeyPressed(KeyEvent e){ 
      p.keyPressed(e); 
     } 
    } 
} 
+0

Sind Sie sicher, dass der 'KeyListener' aufgerufen wird? – MadProgrammer

+0

das ist das genaue Programm ... wenn ich es verpasste ... pls help @ MadProgrammer – Amitabh

+0

ja der Keylistener ist in der Board-Klasse Konstruktor @ MadProgrammer – Amitabh

Antwort

2

starten durch einen sehr genauen Blick auf reden:

if (key == KeyEvent.VK_LEFT); 

Does, die Ihnen komisch aussehen?

if (key == KeyEvent.VK_LEFT); // <--- What's the ; doing here? 

ändern es mehr wie zu sein ...

if (key == KeyEvent.VK_LEFT) { 
    dx = 0; 
} 

Und, ja, das ist, warum Sie ermutigt sind { ... }

Weiter zu verwenden, nehmen Sie einen genaueren Blick auf .. .

public void KeyPressed(KeyEvent e) { 

Sehen Sie etwas falsch dort? Warum startet es mit einem Groß K, das ist nicht die richtige Methode Unterschrift

ändern, um etwas mehr wie ...

@Override 
public void keyReleased(KeyEvent e) { 
    p.keyReleased(e); 
} 

@Override 
public void keyPressed(KeyEvent e) { 
    p.keyPressed(e); 
} 

Ja, das ist, warum Sie ermutigt @Override zu verwenden;)

Und schließlich Ihre paint Methode paintComponent ändern

@Override 
protected void paintComponent(Graphics g) { 
    super.paintComponent(g); 

Sie werden ermutigt, paintComponent außer Kraft setzen, wenn benutzerdefinierte malerei, neigt es weniger Probleme verursachen

ich auch würden Sie encorage es am Key Bindings API und Gunst über KeyListener einen Blick zu haben, wie es erforderlich ist eine bessere Kontrolle der Fokusebene stellt die wichtigsten Ereignisse auslösen

Ich würde Sie auch ermutigen, der Board außer Kraft zu setzen und geben Sie Ihre bevorzugte Größe von dort, anstatt die Größe des Rahmens. Die Rahmengröße enthält die Verzierungen des Rahmens, so dass Ihr Inhalt kleiner ist als die Rahmengröße

+0

Sie sind Gott @ MadProgrammer – Amitabh

+1

Nein, ich habe einfach kein Leben;) – MadProgrammer

+0

Thnx Mann .... Thnku so viel für Ihre Eingaben .. es hat funktioniert ... Ich werde was folgen du sagtest – Amitabh

Verwandte Themen