Tips:Eclipse要实现小动画的制作,需要一些包和小插件才可以实现
思路:要实现一个无限循环的小球碰撞弹回过程,要考虑以下几点:首先,考虑小球的运动状态,没有碰到边界时的惯性运动状态和碰到边界时的反弹状态【注意:碰到边界是指小球的最外围边界,要考虑小球的半径。】,碰到竖墙反弹时,纵坐标不变,横坐标变为相反数。同理,碰到横墙时,横坐标不变,纵坐标变为相反数;其次,这一运动碰撞过程的呈现,主要是在小球碰到边界后的Pause操作决定的,所以加上Pause()语句才能有反弹效果的显现。最后就是要考虑一些运动过程中的细节问题了(也就是小球是怎么move的)。
弹球动画1【无球运动轨迹,但有线框边界】
import stanford.karel.*;
import acm.graphics.*;
import acm.program.*;
import java.awt.*;
import java.awt.Color;
import acm.program.GraphicsProgram;
public class Beeperline extends GraphicsProgram {
public void run() {
int x = 1,y = 1; //球大小
GOval r = new GOval(20, 20); //球空实心
r.setFilled(true); //球色
r.setColor(Color.pink); //球初始位置
add(r, 20,r.getHeight()/2);
GRect myRect = new GRect(500, 300);
myRect.setColor(Color.black);
myRect.setFilled(false);
add(myRect, 20,r.getHeight()/2);
while(true) {
if(r.getX()<20 || r.getX()>500)
x = -x;
if(r.getY()<r.getHeight()/2 || r.getY()>r.getHeight()/2+280)
y = -y;
r.move(x, y);
pause(10);
}
}
}
弹球动画2【附带轨迹】
public class Beeperline extends GraphicsProgram {
private static final int SIZE = 30;
public void run() {
int startX = 0;
int startY = 100;
int vx = 10, vy = 10;
int dx = startX + vx;
int dy = startY + vy;
GOval r = new GOval(SIZE,SIZE);
r.setFilled(true);
r.setColor(Color.RED);
add(r,0,100);
while (true) {
r.move(vx, vy);
GLine line = new GLine(dx+(SIZE/2), dy+(SIZE/2), dx+(SIZE/2)+vx, dy+(SIZE/2)+vy);
add(line);
if ( (dx+SIZE>=getWidth()) || (dx<=0) )
vx = -vx;
if ( (dy+SIZE>=getHeight()) || (dy<=0) )
vy = -vy;
dx = dx+vx;
dy = dy+vy;
pause(20);
}
}
}