小球卡通动画。在一个大小为 1450*750的面板内的坐标(0,740)处,绘制沿水平方向移动(步长为10)、且逐步变大的红色小球。小球移动要点:面板类实现 Runnable接口,在线程业务逻辑内重新绘制小球,实现鼠标位于小球上时,暂停运动。
时间: 2024-10-21 20:07:13 浏览: 8
在创建一个小球卡通动画时,我们可以按照以下步骤来设计:
1. **创建面板类**:
首先,我们需要一个`Panel`类,它将继承`JPanel`(Java Swing库中的组件),并实现`Runnable`接口。这将允许我们在单独的线程中处理绘图。
```java
import javax.swing.JPanel;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class Panel extends JPanel implements Runnable {
private int x = 0;
private int size = 10;
private boolean isRunning = true;
private Timer timer;
public Panel() {
// 添加鼠标监听器,以便于响应鼠标事件
addMouseListener(new MouseAdapter() {
@Override
public void mouseMoved(MouseEvent e) {
pauseWhenMouseOver();
}
});
// 初始化定时器
initTimer();
}
// ...其他方法...
private void initTimer() {
timer = new Timer(10, this);
timer.start();
}
// ...绘制小球的方法...
@Override
public void run() {
// 线程内重绘小球
paintComponent(getGraphics());
if (isRunning) {
x += 10; // 水平移动
if (x > getWidth()) { // 边界检查
x = 0;
size++; // 动画中逐渐增大
}
repaint(); // 更新显示
} else {
timer.stop();
}
}
private void pauseWhenMouseOver() {
setRunning(!isRunning); // 当鼠标在小球上时暂停或恢复移动
}
// getters and setters for isRunning and size
}
```
2. **绘制小球**:
在`paintComponent(Graphics g)`方法中,你需要根据`x`和`size`变量来绘制红色的小球,并确保它的位置逐渐向右移动并且随着每次循环变大。
```java
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
Color oldColor = g.getColor();
g.setColor(Color.RED);
int radius = size / 2;
int ballX = x - radius;
int ballY = getHeight() - 740 - radius; // 注意调整y轴坐标
g2d.fillOval(ballX, ballY, radius * 2, radius * 2);
g.setColor(oldColor);
}
```
阅读全文