在上一节的教程中,如何运用java程序设计创建移动图形,那么现在我们在深入去制作,那么就是对于运动的控制了。
在上一节的代码中,我们把控制小球运动的代码放在了
publicvoidgameUpdate(){//更新游戏逻辑
x++;//让小球向右跑
}
这个方法里,我们修改这里的代码就能让小球形成其他的运动方式。
下面我们主要介绍几种运动方式:
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也要随着时间增长,我们可以这样修改代码来实现加速度,请看下面代码:
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();}
}
}
}
最后给大家两个练习,然后对源代码进行修改,希望大家能够好好对待。
练习:3.请画一个黄色半径100小球,初始位置为(100,50),的平抛运动,水平方向的初速度为20
练习4.请画一个红色半径为100的小球,初始位置为(400,350),向上的垂直抛起动运,向上的初速度为50
小编结语:对于这两个运动的控制代码,大家可以熟悉,并且在这个基础上进行游戏设计的修改与改善,变成自己喜欢的运动。大家可以自行进行修改代码。
¥498.00
¥399.00
¥29.00
¥299.00