在游戏中使用图像
|
|
Author: 一滴蔚蓝色 | Date: 2008-03-01 |
View: 873 |
开发技术 - 程序设计 | Digg:
0
|
|
作者:潇潇 出处:www.j2mefans.com 该文章为本站原创,如有引用,请注明出处和作者 前面的例子我们都是使用方块来表示物体的,是不是对这样简单的界面感到厌烦了。别着急,这一节我们就来谈在游戏中使用图像的问题。 其实装载图像很简单: 先定义一个Image类的变量用来存储图像: Image fileImage = null; 然后我们使用Image类的createImage方法,将要载入图像的地址传递给该函数,就会返回一个该图的指针,将它存放在前面定义的Image类变量中: Try { fileImage = Image.create.Image(filename); } catch( IOExcption ioe ) { System.out.println(“can’t load file : ” + filename ); } 我们举一个简单的例子,做一个游戏的开始界面: 先构建一个MIDlet类文件。 添加下面两行代码,为程序编译运行提供相应的库。 import javax . microedition . midlet . * ; import javax . microedition . lcdui . * ; 然后定义一个jiguoheMIDlet的类结构,要求继承自MIDlet类,并扩展CommandListener接口。 public class jiguoheMIDlet extends MIDlet implements CommandListener { } 在类中添加下面代码: 先定义一个我们要创建的启动界面类的实例,该类我们命名为Ocanvas。 private OCanvas canvas; 这样我们就可以在后面将他启动并显示出来。 紧接着,我们要分别实现MIDlet类的几个函数。下面是startApp ( ) public void startApp ( ) { if ( canvas = = null ) { //将负责现实的类通过我们自定义的Ocanvas类的构造函数,传递给Ocanvas类 canvas = new Ocanvas ( Display . getDisplay ( this ) ) ; //定义了一个Command控件变量并创建一个新的Command实例 Command exitCommand = new Command ( " Exit " , Command . EXIT , 0 ) ; //将命令添加到界面中 canvas . addCommand ( exitCommand ) ; //设定对该命令的监听 canvas . setCommandListener ( this ) ; } //创建成功后启动画布 canvas . start ( ) ; } 另外两个函数为空 public void pauseApp ( ) { } public void destroyApp ( boolean unconditional ) { } //定义命令处理函数,当被监听的命令被触发时, 执行该代码 public void commandAction ( Command c , Displayable s ) { if ( c . getCommandType ( ) = = Command . EXIT ) { destroyApp ( true ) ; notifyDestroyed ( ) ; } } 有了MIDlet类我们程序就可以运行了,下面我们来添加程序的核心,就是有关界面绘制和显示的部分。 仍然实现添加必需的库文件: import javax.microedition.lcdui.*; //因为有错误处理,所以添加下面的库 import java.io.*; 然后定义我们前面提到的界面类Ocanvas,他继承自Canvas类 public class OCanvas extends Canvas { } 在类中添加下面的代码: //因为从MIDlet类的子类中传递过来了显示类Display,所以得到他的一个实例来绘制图像 private Display display; //这里定义一个图像类,用来显示启动界面 private Image title; 然后,构造显示类的构造函数: public Ocanvas ( Display d ) { //继承父类的功能 super ( ) ; //存储显示类的实例 display = d ; } 定义显示类的成员函数strat ( ) : void start ( ) { display . setCurrent ( this ) ; repaint ( ) ; } 最后实现图像显示函数,该函数命名为paint ( ) ,在每次图像更新时自动调用: public void paint (Graphics g ) { //清除屏幕 g . setColor ( 255 , 255 , 255 ) ; // 设置白色 g . fillRect ( 0 , 0 , getWidth ( ) , getHeight ( ) ) ; //用白色填充屏幕 // 创建并载入图像 try { title = Image . createImage ( " / title . png " ) ; } catch ( IOException e ) { System . err . println ( " Failed loading images ! " ) ; } //绘制图像 g . drawImage ( title , 0 , 0 , Graphics . TOP | Graphics . LEFT ) ; } 结果当然和你的图像title.png有关了。 当然我们也可以将我们地游戏主角也换成图像的。 主要的修改在paint方法中: //在绘图的最后添加下面代码: //绘制英雄 g.drawImage(hero,x,y,Graphics.HCENTER|Graphics.VCENTER); 其中hero是Image类的变量,可以通过前面的方法得到一个英雄的图像。x,y表示他的位置,可以在按键控制部分进行相应的控制。 赶快试一试吧! 可以看到英雄在屏幕上移动了,只是不爽的是MIDP1.0不支持透明图像。所以我们的英雄不能很好的和背景颜色相融合。 想了很多方法,最后通过查资料才知道,MIDP1.0不支持透明图像,只有NOKIA的开发包里的一些扩展提供了该功能。 所以,还是放弃MIDP1.0吧,专注于MIDP2.0吧!当然也要多看NOKIA的网站。 更多阅读: |
尚无评论发表