import java.awt.Graphics;
import javax.swing.JApplet;
import javax.swing.JPanel;
public class Circle extends JPanel {
int x = 75;
int y = 100;
int diameter = 50;
public void setAnimationY(int y) {
this.y = y;
}
public int getAnimationY() {
return y;
}
public int getDiameter() {
return diameter;
}
public void setDiameter(int startDiameter) {
diameter = startDiameter;
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawOval(x, y, diameter, diameter);
}
}
import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JApplet;
import javax.swing.JPanel;
import javax.swing.Timer;
public class BouncingBall extends JApplet {
private int speed = 5;
private Timer timer;
private Circle draw;
@Override
public void init() {
super.init();
setLayout(new BorderLayout());
draw = new Circle();
add(draw);
timer = new Timer(30, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int y = draw.getAnimationY();
int diameter = draw.getDiameter();
int roof = getHeight();
y += speed;
if (y < 0) {
y = 0;
speed *= -1;
} else if (y + diameter > roof) {
y = roof - diameter;
speed *= -1;
}
draw.setAnimationY(y);
repaint();
}
});
}
@Override
public void start() {
super.start();
timer.start();
}
@Override
public void stop() {
timer.stop();
super.stop();
}
}
我正在尝试创建一个 JApplet,其中包含一个上下弹跳的球。到目前为止,我已经能够让球上下移动,但现在我正在努力让球更“栩栩如生”,所以我希望每次球反弹时球的高度都会降低,直到最终停止。
我试图使用我为 getHeight() 方法创建的屋顶变量做一个 while 循环,但由于某种原因,当我尝试使用它时,球根本没有移动,或者循环对球没有影响。
我也尝试了 for 循环,但遇到了与 while 循环相同的问题。我认为问题在于我没有将这个 for 循环放在正确的位置以使其正常工作。
提前致谢。