2016-06-23 3 views
0

Я пытаюсь сделать мини-игру, но сначала я узнаю, как оживить :) это будет 2D-игра. Итак, моя проблема в том, что я просто пытаюсь нарисовать прямоугольник своей работой, когда я пытаюсь оживить (я сделал много кода, но не работал :() его не работает.Java Swing Попробуйте сделать небольшую анимацию с прямоугольником

Кто-то может помочь мне исправить или добавить некоторые советы, как я могу попробовать сделать это.

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

Ваш код никогда не добавляет 'Window' к раме. Если вы все-таки добавите его, он отлично работает, насколько я могу судить. – resueman

+1

Я рекомендую вам изменить название своего класса из «окна» на другое (например, MyWindow/userGUI/etc). Существует класс AWT под названием ['Window'] (https://docs.oracle.com/javase/7/docs/api/java/awt/Window.html), это может дать вам некоторые проблемы в будущем. – Frakcool

ответ

2

Ваш код работает отлично, кроме вы забыли добавить компонент (вы назвали его Window) в контейнер (JFrame в данном случае). для этого добавьте f.add(this); в конец вашего Window().

Взгляните на swing-components-and-containers fo r подробнее.

Кроме того, я предлагаю вам взглянуть на Double-buffer-in-standard-Java-AWT и Game loops!

+0

Ох ... я не видел этого спасибо :) –

+0

@ BalázsSzmetana, если ответ Онура отвечает на ваш вопрос, пожалуйста, нажмите галочку, чтобы отметить его как ответ – Ian