java动画2.docx
- 文档编号:20148366
- 上传时间:2023-04-25
- 格式:DOCX
- 页数:26
- 大小:137.27KB
java动画2.docx
《java动画2.docx》由会员分享,可在线阅读,更多相关《java动画2.docx(26页珍藏版)》请在冰豆网上搜索。
java动画2
动画2
这一讲我们继续学习动画。
好呀,好想马上就能制作Java游戏啊。
恩,学习了本讲,就离制作真正的Java程序又近了一步了啊。
1.上一讲的程序
先来看一下上一讲我们学习的程序。
importjavax.microedition.lcdui.Canvas;
importjavax.microedition.lcdui.Display;
importjavax.microedition.midlet.MIDlet;
importjavax.microedition.midlet.MIDletStateChangeException;
/**
*车动画
*/
publicclassCarAnimationextendsMIDlet{
privateCanvascanvas;
privateDisplaydisplay;
/**
*开始方法
*/
protectedvoidstartApp()throwsMIDletStateChangeException{
display=Display.getDisplay(this);
canvas=newCarCanvas();
display.setCurrent(canvas);
}
protectedvoidpauseApp(){
}
protectedvoiddestroyApp(booleanbool)throwsMIDletStateChangeException{
}
}
importjava.io.IOException;
importjavax.microedition.lcdui.Canvas;
importjavax.microedition.lcdui.Graphics;
importjavax.microedition.lcdui.Image;
/**
*车动画canvas
*/
publicclassCarCanvasextendsCanvasimplementsRunnable{
privateImagecarImage;
privateintx=130;//x坐标
privateinty=130;//y坐标
/**
*构造器
*/
publicCarCanvas(){
try{
carImage=Image.createImage("/car2.png");
}catch(IOExceptione){
e.printStackTrace();
}
//使用线程
Threadth=newThread(this);//制作新线程
th.start();//开始线程
}
/**
*描画用方法
*/
protectedvoidpaint(Graphicsg){
//描画与画面大小一样的长方形
g.setColor(255,255,255);
g.fillRect(0,0,getWidth(),getHeight());
//显示图像
g.drawImage(carImage,x,y,Graphics.HCENTER|Graphics.VCENTER);
}
/**
*运行线程的处理
*/
publicvoidrun(){
while(true){
y++;
x-=2;
//到达一端后从相反端出来
if(x<0)x=getWidth();
if(y>getHeight())y=0;
repaint();
try{
Thread.sleep(100);//100毫秒待机
}catch(InterruptedExceptione){
}
}
}
}
2.制作游戏
上一讲我们制作了使车移动的程序,这一讲把这个程序改造一下,制作一个游戏程序怎么样?
噢!
游戏啊!
是不是太难了啊。
没关系。
游戏也不复杂,小尼克应该了解的吧。
是什么样的游戏呢?
躲闪障碍物,最后到达终点的racinggame。
来试试制作可以移动障碍物的车程序吧。
真有你说的那么简单么…
当然了,用目前为止咱们学的就够了。
下面是制作步骤,按照这个步骤试试吧。
1.准备图像
2.车的操作
3.配置障碍物
4.移动障碍物
5.判定与障碍物的冲突
2.1.准备图像
首先要准备游戏使用的图像。
本讲除了要准备车的图像之外,还要准备障碍物的车的图像。
2.2.车的操作
下面我们对车进行改造,利用十字键使车左右移动。
要使用以前用过的keyevent吧。
没错,那么尼克你就做做看吧。
是这样么?
改造CarCanvas,使按左右键时改变x坐标。
importjava.io.IOException;
importjavax.microedition.lcdui.Canvas;
importjavax.microedition.lcdui.Graphics;
importjavax.microedition.lcdui.Image;
/**
*车动画canvas
*/
publicclassCarCanvasextendsCanvasimplementsRunnable{
privateImagecarImage;
privateintx=100;//x坐标
privateinty=180;//y坐标
/**
*构造器
*/
publicCarCanvas(){
try{
carImage=Image.createImage("/car3.png");
}catch(IOExceptione){
e.printStackTrace();
}
//使用线程
Threadth=newThread(this);//制作新线程
th.start();//开始线程
}
/**
*描画用方法
*/
protectedvoidpaint(Graphicsg){
//描画与画面大小一样的长方形
g.setColor(255,255,255);
g.fillRect(0,0,getWidth(),getHeight());
//显示图像
g.drawImage(carImage,x,y,Graphics.HCENTER|Graphics.VCENTER);
}
/**
*运行线程的处理
*/
publicvoidrun(){
while(true){
y--;
//到达一端后从相反端出来
if(x<0)x=getWidth();
if(y>getHeight())y=0;
repaint();
try{
Thread.sleep(100);//100毫秒待机
}catch(InterruptedExceptione){
}
}
}
/**************************************************
*keyevent处理
**************************************************/
/**
*键被按下时的处理
*/
protectedvoidkeyPressed(intkey){
intgameaction=getGameAction(key);
switch(gameaction){
caseCanvas.RIGHT:
x+=3;
break;
caseCanvas.LEFT:
x-=3;
break;
default:
}
}
}
2.3.配置障碍物
好,这样就使车移动了。
下面是配置障碍物的车,先试着在(30,30)的位置配置一个看看。
好的。
importjava.io.IOException;
importjavax.microedition.lcdui.Canvas;
importjavax.microedition.lcdui.Graphics;
importjavax.microedition.lcdui.Image;
/**
*车动画canvas
*/
publicclassCarCanvasextendsCanvasimplementsRunnable{
privateImagecarImage;
privateImageenemyImage;
privateintx=100;//x坐标
privateinty=180;//y坐标
/**
*构造器
*/
publicCarCanvas(){
try{
carImage=Image.createImage("/car3.png");
enemyImage=Image.createImage("/enemycar.png");
}catch(IOExceptione){
e.printStackTrace();
}
//使用线程
Threadth=newThread(this);//制作新线程
th.start();//开始线程
}
/**
*描画用方法
*/
protectedvoidpaint(Graphicsg){
//描画与画面大小一样的长方形
g.setColor(255,255,255);
g.fillRect(0,0,getWidth(),getHeight());
//显示图像
g.drawImage(carImage,x,y,Graphics.HCENTER|Graphics.VCENTER);
g.drawImage(enemyImage,30,30,Graphics.HCENTER|Graphics.VCENTER);
}
/**
*运行线程的处理
*/
publicvoidrun(){
while(true){
y--;
//到达一端后从相反端出来
if(x<0)x=getWidth();
if(y>getHeight())y=0;
repaint();
try{
Thread.sleep(100);//100毫秒待机
}catch(InterruptedExceptione){
}
}
}
/**************************************************
*keyevent处理
**************************************************/
/**
*键被按下时的处理
*/
protectedvoidkeyPressed(intkey){
intgameaction=getGameAction(key);
switch(gameaction){
caseCanvas.RIGHT:
x+=3;
break;
caseCanvas.LEFT:
x-=3;
break;
default:
}
}
}
接下来就试着使障碍物移动吧。
如果静止不动会显得很奇怪啊。
那你知道怎么使障碍物移动么?
设障碍物的坐标为变量,利用线程处理对它进行改变。
importjava.io.IOException;
importjavax.microedition.lcdui.Canvas;
importjavax.microedition.lcdui.Graphics;
importjavax.microedition.lcdui.Image;
/**
*车动画canvas
*/
publicclassCarCanvasextendsCanvasimplementsRunnable{
privateImagecarImage;
privateImageenemyImage;
privateintx=100;//x坐标
privateinty=180;//y坐标
privateintenemyX=30;//敌人x坐标
privateintenemyY=30;//敌人y坐标
/**
*构造器
*/
publicCarCanvas(){
try{
carImage=Image.createImage("/car3.png");
enemyImage=Image.createImage("/enemycar.png");
}catch(IOExceptione){
e.printStackTrace();
}
//使用线程
Threadth=newThread(this);//制作新线程
th.start();//开始线程
}
/**
*描画用方法
*/
protectedvoidpaint(Graphicsg){
//描画与画面大小一样的长方形
g.setColor(255,255,255);
g.fillRect(0,0,getWidth(),getHeight());
//显示图像
g.drawImage(carImage,x,y,Graphics.HCENTER|Graphics.VCENTER);
g.drawImage(enemyImage,enemyX,enemyY,Graphics.HCENTER|Graphics.VCENTER);
}
/**
*运行线程的处理
*/
publicvoidrun(){
while(true){
y--;
enemyX+=3;
//到达一端后从相反端出来
if(x<0)x=getWidth();
if(y>getHeight())y=0;
if(enemyX>getWidth())enemyX=0;
repaint();
try{
Thread.sleep(100);//100毫秒待机
}catch(InterruptedExceptione){
}
}
}
/**************************************************
*keyevent处理
**************************************************/
/**
*键被按下时的处理
*/
protectedvoidkeyPressed(intkey){
intgameaction=getGameAction(key);
switch(gameaction){
caseCanvas.RIGHT:
x+=3;
break;
caseCanvas.LEFT:
x-=3;
break;
default:
}
}
}
2.4.判定与障碍物的冲突
最后是判定与障碍物的冲突。
与障碍物发生冲突后,游戏就停顿了。
自己的车与障碍物的车发生冲突,游戏停顿…恩,自己的车的图像与障碍物的车的图像开始重合,就是发生冲突了吧?
就是这样。
那么就必须要知道图像的尺寸了。
要取得图像的尺寸可以使用以下两个方法。
image.getHeight();
image.getWidth’();
使用上面两个方法,制作判定车与障碍物的冲突的if语句吧。
要注意的是,车与障碍物的坐标都要位于图像的中心。
好,是下面这样么?
//冲突判定
if(x-carImage.getWidth()/2 x+carImage.getWidth()/2>enemyX-enemyImage.getWidth()/2){ if(y-carImage.getHeight()/2 y+carImage.getHeight()/2>enemyY-enemyImage.getHeight()/2){ //发生冲突时的处理 } } 哦,做的不错啊。 那么使游戏停顿的处理如下所示。 wait() Wait方法可以停止线程的处理,这时会有例外发生。 那就必须要加入例外处理了? 恩,没错。 加到程序里面试试吧。 加入使游戏停顿的处理后的sourcecode是这样的吧。 importjava.io.IOException; importjavax.microedition.lcdui.Canvas; importjavax.microedition.lcdui.Graphics; importjavax.microedition.lcdui.Image; /** *车动画canvas */ publicclassCarCanvasextendsCanvasimplementsRunnable{ privateImagecarImage; privateImageenemyImage; privateintx=100;//x坐标 privateinty=180;//y坐标 privateintenemyX=30;//敌人x坐标 privateintenemyY=30;//敌人y坐标 /** *构造器 */ publicCarCanvas(){ try{ carImage=Image.createImage("/car3.png"); enemyImage=Image.createImage("/enemycar.png"); }catch(IOExceptione){ e.printStackTrace(); } //使用线程 Threadth=newThread(this);//制作新线程 th.start();//开始线程 } /** *描画用方法 */ protectedvoidpaint(Graphicsg){ //描画与画面大小一样的长方形 g.setColor(255,255,255); g.fillRect(0,0,getWidth(),getHeight()); //显示图像 g.drawImage(carImage,x,y,Graphics.HCENTER|Graphics.VCENTER); g.drawImage(enemyImage,enemyX,enemyY,Graphics.HCENTER|Graphics.VCENTER); } /** *运行线程的处理 */ publicvoidrun(){ while(true){ y--; enemyX+=3; //到达一端后从相反端出来 if(x<0)x=getWidth(); if(y>getHeight())y=0; if(enemyX>getWidth())enemyX=0; //冲突判定 try{ if(x-carImage.getWidth()/2 x+carImage.getWidth()/2>enemyX-enemyImage.getWidth()/2){ if(y-carImage.getHeight()/2 y+carImage.getHeight()/2>enemyY-enemyImage.getHeight()/2){ //发生冲突时的处理 wait();//使游戏停顿 } } }catch(InterruptedExceptione1){ } repaint(); try{ Thread.sleep(100);//100毫秒待机 }catch(InterruptedExceptione){ } } } /************************************************** *keyevent处理 **************************************************/ /** *键被按下时的处理 */ protectedvoidkeyPressed(intkey){ in
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 动画
![提示](https://static.bdocx.com/images/bang_tan.gif)