首页 > 解决方案 > 使用摇摆计时器重绘游戏时出现问题

问题描述

这是对我之前的问题的跟进。我正在用 Java 制作 Frogger 我正在尝试实现一个摇摆计时器,但它似乎不起作用。我在设置它时遇到了一些麻烦。

我已经尝试在我的代码的不同区域中实现它,并且没有得出关于它有什么问题的结论。我遵循了多个教程,但没有任何效果。

 private int delay = 7;

  public CPT() {
    setLayout(new BorderLayout());
    label = new JLabel("Frogger");
    frame1 = new JFrame("Main");
    label.setFont(new Font("Serif", Font.BOLD,50));
    label.setBounds(275,10,250,250);
    button1 = new JButton("PLAY");
    button1.setBounds(300,350,100,50);
    button1.setOpaque(false);
    button1.setVisible(true);
    this.setOpaque(false);
    this.setLayout(null);
    this.add(label);
    button1.addActionListener(new ActionListener(){ 
      public void actionPerformed(ActionEvent e){
        frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame1.setVisible(true);
        frame1.setSize(700,500);
        frame1.setResizable(false);
        button1.setVisible(false);
        frame1.add(new TrainCanvas());
        frame1.add(p1);
        frame1.addKeyListener(new frog());
      } 
    });
    this.add(button1);
  }

这是我班级的主要构造函数

  class TrainCanvas extends JComponent {

    private int lastX = 0;
    private int lastX_1 = 0;
    private int lastX_2 = 0;


   public TrainCanvas() {
//      Thread animationThread = new Thread(new Runnable() {
//        public void run() {
//          while (true) {
//            repaint();
//            try {Thread.sleep(10);} catch (Exception ex) {}
//          }
//        }
//      });
//      
//      animationThread.start();
//    }
     Timer time = new Timer(delay, this {
          TrainCanvas.repaint();
    });

    time.start();
   }

    public void paintComponent(Graphics g) {
      Graphics2D gg = (Graphics2D) g;

      int w = getWidth();
      int h = getHeight();

      int trainW_1 = 100;
      int trainH_1 = 5;
      int trainSpeed_1 = 3;

      int x = lastX + trainSpeed_1;

      if (x > w + trainW_1) {
        x = -trainW_1;
      }

      gg.setColor(Color.BLACK);
      gg.fillRect(x, h/2 + trainH_1, trainW_1, trainH_1);

      lastX = x;

  //Draw Frog
      frog = new Rectangle(f_x,f_y,25,25);
      g3.fill(frog);
      g3.setColor(Color.GREEN);
    }
  }

这是绘制主游戏的代码,我之前使用了一个线程,但被告知摇摆计时器更有用。

计时器应该重新绘制我的游戏,但似乎我什至无法正确实现它,即使我被告知这是正确的。任何帮助表示赞赏!

标签: javaswingtimerrepaint

解决方案


推荐阅读