小球垂直下落每次弹起来的高度是落下的一半的JAVA动画
时间: 2024-10-27 11:11:20 浏览: 19
小球做圆周运动JAVA程序.rar_java圆周转动_java小球环绕_动画_小球 圆周运动
在Java中创建小球垂直下落并每次弹起高度减半的动画,通常会使用Swing库或者JavaFX库来绘制图形,并结合计时循环(如`javax.swing.Timer`或`java.util.concurrent.TimeUnit`)来控制时间步长。以下是一个简单的示例,假设我们使用Swing库:
```java
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class BouncingBall extends JFrame {
private static final int WIDTH = 400;
private static final int HEIGHT = 400;
private Ball ball;
private Timer timer;
public BouncingBall() {
ball = new Ball(20, HEIGHT / 2);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(WIDTH, HEIGHT);
setLayout(new BorderLayout());
add(new JPanel(ball), BorderLayout.CENTER);
// 设置动画间隔和回调函数
timer = new Timer(50, new ActionListener() { // 每隔50毫秒执行一次
@Override
public void actionPerformed(ActionEvent e) {
moveAndCheckBounce();
}
});
timer.start();
}
private void moveAndCheckBounce() {
ball.move(); // 移动球
// 如果球碰到顶部或底部,改变弹跳规则
if (ball.getY() <= 0 || ball.getY() >= HEIGHT - ball.getSize()) {
ball.setBounceHeight(ball.getPreviousBounceHeight() / 2);
}
repaint(); // 重绘界面更新球的位置
}
public static void main(String[] args) {
SwingUtilities.invokeLater(BouncingBall::new); // 使用Swing应用线程启动
}
// 球的类,包含位置、大小、弹跳高度等属性以及移动方法
private class Ball extends JPanel {
private int x, y, size;
private double bounceHeight;
private double previousBounceHeight;
public Ball(int size, int initialY) {
this.size = size;
this.y = initialY;
this.previousBounceHeight = bounceHeight = size * 2; // 初始弹跳高度为一半
}
public void move() {
x += 2; // 每次移动两个像素模拟匀速直线运动
repaint();
}
// 更改方法以适应每次弹起高度减半的规则
public void setBounceHeight(double bounceHeight) {
this.bounceHeight = bounceHeight;
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.BLACK);
g.fillOval(x, y, size, size);
}
}
}
阅读全文