Java之Eclipse实现弹球小动画(轨迹和线框版本)

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);
        }
    }
}

猜你喜欢

转载自blog.csdn.net/Luoxiaobaia/article/details/115200639
今日推荐