下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

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

作者:课课家教育     来源: http://www.kokojia.com点击数:1777发布时间: 2018-11-23 08:10:11

标签: JAVA游戏设计JAVA游戏制作

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

  在上一节的教程中,如何运用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

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

赞(0)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程