21xrx.com
2024-11-08 21:19:53 Friday
登录
文章检索 我的文章 写文章
Java制作动画:模拟下落物体的效果
2023-06-16 13:37:30 深夜i     --     --
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();

  }

}

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

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复