21xrx.com
2025-07-07 02:18:55 Monday
文章检索 我的文章 写文章
Java制作动画:模拟下落物体的效果
2023-06-16 13:37:30 深夜i     12     0
Java GUI

在Java中,我们可以使用Java图形用户界面(Java Graphics User Interface,简称Java GUI)实现动画效果。其中,模拟下落物体的效果是一个很好的练手项目,本文将介绍如何利用Java GUI实现下落物体动画。

首先,我们需要创建一个继承自JPanel的类,作为我们的动画面板。在此类中,我们可以定义一个圆形的物体,并在paintComponent()方法中绘制它。

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;
public class AnimationPanel extends JPanel {
  private int x, y; //物体左上角坐标
  private int size; //物体直径
  private Color color; //物体颜色
  
  public AnimationPanel()
    x = 100;
    y = 0;
    size = 50;
    color = Color.RED;
  
  
  public void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.setColor(color);
    g.fillOval(x, y, size, size);
  }
}

接下来,我们需要在JFrame中添加这个动画面板,并动态改变物体的坐标,实现下落的效果。为了在不同的平台上实现相同的动画速度,我们可以使用System.currentTimeMillis()方法获取当前系统时间,并根据帧率计算每帧间隔的时间。

import javax.swing.JFrame;
public class AnimationFrame extends JFrame implements Runnable {
  private AnimationPanel panel;
  private final int FRAMES_PER_SECOND = 60;
  private final int FRAME_TIME = 1000 / FRAMES_PER_SECOND;
  private Thread animationThread;
  
  public AnimationFrame() {
    panel = new AnimationPanel();
    add(panel);
    setSize(300, 400);
    setVisible(true);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    animationThread = new Thread(this);
    animationThread.start();
  }
  
  public void run() {
    long startTime, endTime, deltaTime;
    while (true) {
      startTime = System.currentTimeMillis();
      panel.repaint();
      panel.setLocation(panel.getX(), panel.getY() + 5);
      if (panel.getY() + panel.getHeight() > getHeight()) {
        panel.setLocation(panel.getX(), 0);
      }
      endTime = System.currentTimeMillis();
      deltaTime = endTime - startTime;
      if (deltaTime < FRAME_TIME) {
        try {
          Thread.sleep(FRAME_TIME - deltaTime);
        } catch (InterruptedException e) {
          e.printStackTrace();
        }
      }
    }
  }
  
  public static void main(String[] args) {
    new AnimationFrame();
  }
}

到这里,我们已经实现了下落物体的动画效果。 、动画效果、帧率控制。

  
  

评论区