2016-06-23 4 views
0

Ich versuche, ein Minispiel zu machen, aber zuerst lerne ich zu animieren :) es wird ein 2D-Spiel sein. Also mein Problem ist, wenn ich versuche, ein Rechteck zu zeichnen, wenn ich versuche zu animieren (ich tat viel Code, aber nicht funktioniert :() es funktioniert nicht.Java Swing Versuchen Sie, eine kleine Animation mit Rechteck zu machen

Einige kann mir helfen, es zu beheben oder hinzuzufügen einige Tipps, wie ich kann versuchen, es zu tun.

public class Window extends JPanel implements ActionListener { 

    Timer tm = new Timer(5 , this); 

    int x2 = 0 , velX = 2; 

    static int x= 500; 
    static int y= 500; 

    public void paintComponent(Graphics g){ 

     super.paintComponent(g); 

     g.setColor(Color.RED); 
     g.fillRect(x2, 30, 30, 30); 

     tm.start(); 

    } 

    public Window(){ 

     JFrame f = new JFrame(); 
     f.pack(); 
     f.setTitle("Game"); 
     f.setSize(x,y); 
     f.setVisible(true); 
     f.setLocationRelativeTo(null); 
     f.setDefaultCloseOperation(f.EXIT_ON_CLOSE); 
    } 

    /*public void paint(Graphics g){ 


     Graphics2D g2d = (Graphics2D) g; 
     Rectangle rect = new Rectangle(50, 50, 50, 50); 


     g2d.translate(25, 25); 
     g2d.rotate(Math.toRadians(45)); 
     g2d.draw(rect); 
    }*/ 

    public static void main(String [] args) throws InterruptedException{ 
     Game g = new Game(); 
     g.setName("Test"); 
     System.out.println(g.getName()); 
     g.setScore(); 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 

     x2 = x2 + velX; 
     repaint(); 

    } 

} 
+0

Ihr Code einen Blick nehmen nie einen 'Window' an einem Rahmen hinzufügt. Wenn Sie es jedoch hinzufügen, funktioniert es gut, soweit ich das beurteilen kann. – resueman

+1

Ich empfehle Ihnen, Ihren Klassennamen von 'Window' in etwas anderes zu ändern (wie MyWindow/userGUI/etc). Es gibt eine AWT-Klasse namens ['Window'] (https://docs.oracle.com/javase/7/docs/api/java/awt/Window.html), die Ihnen in der Zukunft Probleme bereiten könnte. – Frakcool

Antwort

2

Ihr Code funktioniert gut, außer Sie vergessen, Ihre Komponente hinzuzufügen (Sie nannten es Window) in den Behälter (JFrame in diesem Fall). dass f.add(this); Dazu fügen Sie Das Ende Ihrer Window() Erbauer

Werfen Sie einen Blick auf swing-components-and-containers für mo zur Info

Auch empfehle ich Ihnen bei Double-buffer-in-standard-Java-AWT und Game loops!

+0

Ohh ... ich sah es nicht danke :) –

+0

@ BalázsSzmetana, wenn Onurs Antwort Ihre Frage beantwortet, klicken Sie bitte auf das Häkchen, um es als die Antwort zu markieren – Ian