java动画2.docx

上传人:b****1 文档编号:721834 上传时间:2023-04-29 格式:DOCX 页数:26 大小:137.27KB
下载 相关 举报
java动画2.docx_第1页
第1页 / 共26页
java动画2.docx_第2页
第2页 / 共26页
java动画2.docx_第3页
第3页 / 共26页
java动画2.docx_第4页
第4页 / 共26页
java动画2.docx_第5页
第5页 / 共26页
java动画2.docx_第6页
第6页 / 共26页
java动画2.docx_第7页
第7页 / 共26页
java动画2.docx_第8页
第8页 / 共26页
java动画2.docx_第9页
第9页 / 共26页
java动画2.docx_第10页
第10页 / 共26页
java动画2.docx_第11页
第11页 / 共26页
java动画2.docx_第12页
第12页 / 共26页
java动画2.docx_第13页
第13页 / 共26页
java动画2.docx_第14页
第14页 / 共26页
java动画2.docx_第15页
第15页 / 共26页
java动画2.docx_第16页
第16页 / 共26页
java动画2.docx_第17页
第17页 / 共26页
java动画2.docx_第18页
第18页 / 共26页
java动画2.docx_第19页
第19页 / 共26页
java动画2.docx_第20页
第20页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

java动画2.docx

《java动画2.docx》由会员分享,可在线阅读,更多相关《java动画2.docx(26页珍藏版)》请在冰点文库上搜索。

java动画2.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 临时分类 > 批量上传

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2