如何运用java程序设计创建移动图形(运动的控制)

    作者:课课家教育更新于: 2018-11-21 20:10:31

    大神带你学编程,欢迎选课

      在上一节的教程中,如何运用java程序设计创建移动图形,那么现在我们在深入去制作,那么就是对于运动的控制了。

      在上一节的代码中,我们把控制小球运动的代码放在了

      publicvoidgameUpdate(){//更新游戏逻辑

       x++;//让小球向右跑

      }

      这个方法里,我们修改这里的代码就能让小球形成其他的运动方式。

      下面我们主要介绍几种运动方式:

    如何运用java程序设计创建移动图形(运动的控制)_JAVA游戏设计_JAVA_游戏制作_课课家

      1.匀速运动。

      当物体以平均的速度运动,就形成了匀速运动,表现在x,y轴上,可以写成

      x=x+dx;y=y+dy;这里dx,dy是一个固定值,表示在x,y方向上的速度,上面MyPanel代码我们可以添加下面红色部分,实现匀速运动,注意这里可以设置dx,dy来加快它的运动。

      我们修改上题的MyPanel类:

      importjava.awt.*;

      importjava.awt.image.*;

      importjava.util.*;

      publicclassMyPanelextendsPanelimplementsRunnable{

      privateintx;

      privateinty;

      privateintdx,dy;

      privateintdiameter;

      privateintwidth;

      privateintheight;

      privateImageim;

      privateGraphicsdbg;

      publicMyPanel(){

      x=50;

      y=50;

      dx=10;dy=10;

      diameter=50;

      width=500;

      height=500;

      setPreferredSize(newDimension(width,height));//设置组件的大小

     }

      publicvoidgamePaint(){//前屏绘制

      Graphicsg;

      try{

      g=this.getGraphics();//获取当前屏幕的Graphics对象

      if(g!=null&&im!=null){

      g.drawImage(im,0,0,null);//将图像缓冲区中的内容复制到前屏缓冲区,显示出来

     }

      g.dispose();//释放当前屏幕的Graphics对象

      }catch(Exceptione){

     }

    }

      publicvoidgameRender(){//离屏绘制

      if(im==null){

      im=createImage(width,height);

      if(im==null){

      System.out.println("imisnull");

      }else{

      dbg=im.getGraphics();

     }

    }

      dbg.setColor(Color.WHITE);

      dbg.fillRect(0,0,width,height);//用底色矩形填充画版,擦去图案

      dbg.setColor(Color.blue);

      dbg.fillOval(x,y,diameter,diameter);//画出椭圆

     }

      publicvoidgameUpdate(){//更新游戏逻辑

       x=x+dx;//让小球向右跑

       y=y+dy;//让小球向下跑

     }

      publicvoidrun(){

      while(true){

       gameUpdate();

      gameRender();

      gamePaint();

      //以下我们用一个延时函数代替空循环来延时,sleep(10)中的数字代表延时毫秒,数字越小越快

      try{

      Thread.sleep(10);}//括号里面的10代表10毫秒,也就是0.001秒,可以该成你需要的时间

      catch(InterruptedExceptione){

      e.printStackTrace();}

      }

     }

    }

      2.加速度运动。如果要进行加速度运动。则dx,和dy也要随着时间增长,我们可以这样修改代码来实现加速度,请看下面代码:

    2.加速度运动。如果要进行加速度运动。则dx,和dy也要随着时间增长,我们可以这样修改代码来实现加速度,请看下面代码:

      importjava.awt.*;

      importjava.awt.image.*;

      importjava.util.*;

      publicclassMyPanelextendsPanelimplementsRunnable{

      privateintx;

      privateinty;

      privateintdx,dy,dcx,dcy;

      privateintdiameter;

      privateintwidth;

      privateintheight;

      privateImageim;

      privateGraphicsdbg;

      publicMyPanel(){

      x=50;

      y=50;

      dx=10;dy=10;dcx=1;dcy=1;

      diameter=50;

      width=500;

      height=500;

      setPreferredSize(newDimension(width,height));//设置组件的大小

     }

      publicvoidgamePaint(){//前屏绘制

      Graphicsg;

      try{

      g=this.getGraphics();//获取当前屏幕的Graphics对象

      if(g!=null&&im!=null){

      g.drawImage(im,0,0,null);//将图像缓冲区中的内容复制到前屏缓冲区,显示出来

    }

      g.dispose();//释放当前屏幕的Graphics对象

      }catch(Exceptione){

     }

    }

      publicvoidgameRender(){//离屏绘制

      if(im==null){

      im=createImage(width,height);

      if(im==null){

      System.out.println("imisnull");

      }else{

      dbg=im.getGraphics();

      }

    }

      dbg.setColor(Color.WHITE);

      dbg.fillRect(0,0,width,height);//用底色矩形填充画版,擦去图案

      dbg.setColor(Color.blue);

      dbg.fillOval(x,y,diameter,diameter);//画出椭圆

     }

      publicvoidgameUpdate(){//更新游戏逻辑

       dx=dx+dcx;

       dy=dy+dcy;

       x=x+dx;//让小球向右跑

       y=y+dy;

     }

      publicvoidrun(){

      while(true){

       gameUpdate();

      gameRender();

      gamePaint();

      //以下我们用一个延时函数代替空循环来延时,sleep(10)中的数字代表延时毫秒,数字越小越快

      try{

      Thread.sleep(200);}//括号里面的10代表10毫秒,也就是0.001秒,可以该成你需要的时间

      catch(InterruptedExceptione){

      e.printStackTrace();}

      }

     }

    }

    2.加速度运动。如果要进行加速度运动。则dx,和dy也要随着时间增长,我们可以这样修改代码来实现加速度,请看下面代码:

      最后给大家两个练习,然后对源代码进行修改,希望大家能够好好对待。

      练习:3.请画一个黄色半径100小球,初始位置为(100,50),的平抛运动,水平方向的初速度为20

      练习4.请画一个红色半径为100的小球,初始位置为(400,350),向上的垂直抛起动运,向上的初速度为50

      小编结语:对于这两个运动的控制代码,大家可以熟悉,并且在这个基础上进行游戏设计的修改与改善,变成自己喜欢的运动。大家可以自行进行修改代码。

课课家教育

未登录