前面几次一直都在讲静物,做了乌龟,做了星星,有想法的coder们就在想怎么样才能让这些东西动起来呢,这也就是推动技术发展的动力,好在这次总算是给大家带来了能让物体动起来的技术,我们现在先不已前面的乌龟和星星为案例继续讲如何写运动的物体,还是先从最简单的物体开始,反正原理都一样,掌握了这个做其他的也会动,这次用一个小球作为案例的切入口
飞行的小球
好了,按照上一次讲的做法,首先我们要列出一个步骤出来,看了标题就知道现在要做一个可以飞行的小球。好的,让我们来大概写一下步骤:
1.先做一个窗体
2.然后就是要画一个小球
3.最后一步就是要实现让小球落下来
按照步骤先画出一个圆,这个代码已经写了这么多次,应该很熟熟练了,我就不详细说了,直接上代码了
import java.awt.*;
public class MyBall {
public static void main(String[] args) {
// TODO Auto-generated method stub
Frame w = new Frame();
w.setSize(300, 400);
MyOval mp = new MyOval();
w.add(mp);
w.show();
}
}
class MyOval extends Panel{
public void paint(Graphics g){
g.fillOval(30, 30, 20, 20);
}
}
出现如图所示的这样一个黑的实心圆
下一步,我们来看看如何实现动画,想想看怎么可以看到运动的小球。我们假设小球是从上往下运动,这也符合物理原理,一个小球自由落体的掉下来,那么我们试想一下,小球的运动轨迹就是一条垂直于你的窗体下边界的一条直线,我说过窗体里其实有一个笛卡尔坐标系,所有的点都有对应的坐标,既然运动轨迹是一条垂直于窗体下边界的直线,也就意味着改变的就是Y轴的数据,我告诉你屏幕的左上方是坐标原点,向下是正方向的Y坐标轴,向右是正方向的X坐标轴,这样一来,那小球下落的轨迹的点的Y值是不断增加的,搞清楚了原理,我们在想一个问题,怎么表示小球是自由落体呢,其实很简单,及时不断的重画小球,这种机械的事情人类不擅长做,直接交给电脑去完成。小球的Y坐标不断的增加,每增加一下,都抹去原有的小球,重画一个。还记得之前将的循环吗?循环可以不断实现增加,至于重画怎么实现,其实也简单,这次案例的最后我会讲述。先跟着我看一下下面这段代码
//主函数省略,和第一段代码的主函数一样
class MyOval extends Panel{
public void paint(Graphics g){
int x=30,y=30;
while(true){
g.fillO