2014-02-04 1 views
1

Раньше я запускал свою программу в виде апплета, и тогда все было хорошо, но я решил попробовать запустить ее в JFrame. У меня недавно была проблема с переопределением, но я думаю, что, наконец, эта проблема решена. Это игра, в которой я недавно работал, в основном это воссоздание Flappy Bird. Я не собираюсь продавать свою законченную версию, так как считаю, что кредит мне не принадлежит. Прямо сейчас я ищу, чтобы сделать трубку по экрану, и я планирую сделать максимум 3 набора труб на экране в любой момент времени.Buggy Pipe Выход игры в JFrame

Исправлена ​​ошибка с рамкой не открывая Новая ошибка: Нежелательный выход

Вот мой основной класс (Игра)

import java.awt.event.ActionEvent; 
    import java.awt.event.ActionListener; 
    import javax.swing.JFrame; 
    import javax.swing.JPanel; 
    import javax.swing.SwingUtilities; 
    import javax.swing.Timer; 

    public class Game { 

     Pipes panel = new Pipes(); 

     public Game() { 
      JFrame f = new JFrame(); 

      f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      f.add(panel); 
      f.setTitle("Pipe Game"); 
      f.pack(); 
      f.setLocationRelativeTo(null); 
      f.setVisible(true); 
      f.setResizable(false); 

      Timer timer = new Timer(10, new ActionListener() { 
       @Override 
       public void actionPerformed(ActionEvent e) { 
        panel.move(); 
        panel.repaint(); 
       } 
      }); 
      timer.start(); 
     } 

     public static void main(String args[]) { 
      SwingUtilities.invokeLater(new Runnable() { 

       @Override 
       public void run() { 
        new Game(); 
       } 
      }); 
     } 
} 

А вот мой класс, который рисует (трубы)

import java.awt.Dimension; 
import java.awt.Graphics; 
import javax.swing.JPanel; 

public class Pipes extends JPanel { 
    //Declare and initialiaze variables 
    int height = setHeight(); 
    int x1 = 754; //xVal start 
    int x2 = 75; //pipe width 
    int y1 = -1; //yVal start 
    int y2;   //pipe height 
    int vel;  //pipe velocity 
    int gap = 130; //gap height 

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

     y2 = height; 
     g.clearRect(0,0,750,500);      //Clear screen 
     g.drawRect(x1,y1,x2,y2);      //Draw part 1 
     g.drawRect(x1-3,y2-1,x2+6,25);     //Draw part 2 
     g.drawRect(x1-3,y2+25+gap,x2+6,25);    //Draw part 3 
     g.drawRect(x1,y2+25+gap+25,x2,500-y2-49-gap); //Draw part 4 
    } 

    public void move() { 
     x1--; 
    } 

    public int getY() { 
     return y2+25; 
    } 

    public int getX() { 
     return x1-3; 
    } 

    public int setHeight() { 
     int num = (int)(9*Math.random() + 1); 
     int val = 0; 
     if (num == 9) 
     { 
      val = 295; 
     } 
     else if (num == 8) 
     { 
      val = 246; 
     } 
     else if (num == 7) 
     { 
      val = 216; 
     } 
     else if (num == 6) 
     { 
      val = 185; 
     } 
     else if (num == 5) 
     { 
      val = 156; 
     } 
     else if (num == 4) 
     { 
      val = 125; 
     } 
     else if (num == 3) 
     { 
      val = 96; 
     } 
     else if (num == 2) 
     { 
      val = 66; 
     } 
     else 
     { 
      val = 25; 
     } 
     return val; 
    } 

    @Override 
    public Dimension getPreferredSize() { 
     return new Dimension(751, 501); 
    } 
} 

ответ

2

Я думаю, вы хотите

public void run() { 
    new Game(); 
} 

вместо

public void run() { 
    new Pipes(); 
} 
+0

Я думаю, ваше право;) +1 – MadProgrammer

+0

Спасибо, ха, это была глупая ошибка. В любом случае, теперь я не получаю желаемый результат. Это должна быть прокрутка трубы по экрану, но ее глючный. Его прокрутка, хотя ... вы могли бы скомпилировать ее и посмотреть? –

+0

Я посмотрел. Но вы, вероятно, должны задать новый вопрос для этого ...? Каково ожидаемое поведение? Кажется, размер JPanel (белая часть JFrame) случайный. Это каждый раз, когда я запускаю его. Затем я вижу прокрутку трубы по экрану, и она останавливается, когда она достигает другой стороны кадра. –

Смежные вопросы