基于linux操作系统的J2ME动画制作入门.pdf
《基于linux操作系统的J2ME动画制作入门.pdf》由会员分享,可在线阅读,更多相关《基于linux操作系统的J2ME动画制作入门.pdf(26页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、作者:刘 宁 Email: 基于 linux 操作系统的 J2ME 动画制作入门 基于 linux 操作系统的 J2ME 动画制作入门 作者:刘 宁 在互联网上经常可以看到的与 J2ME 开发有关的文章都是基于 Windows 系统平台的,由于我日常的工作基本上是在 Linux 系统下完成的,所以写这样一篇文章谈谈在 Linux 系统平台开发 J2ME 动画程序的一些心得。(一)(一)图形设计 图形设计 1.1.图 形 格 式 图 形 格 式 J2ME 手机的 MIDP 1.0 标准版本,只支持 PNG 格式的图像。可以显示静态的图像和非静态的图像。(MIDP 2.0 中支持透明的 PNG 图
2、像)因此你必须对 PNG 有足够的了解才能开发出最适合的游戏界面。注:静态图像:是指一经创建,图像的内容就不再变化的图像。非静态图像:是指图像可以由 J2ME 绘图语句动态创建。什么是 PNG 格式什么是 PNG 格式:PNG的的英文名称为Portable Network Graphics,即便携式网络图片,它便携式网络图片,它是一种位图文件格式。PNG格式使用无损压缩,允许使用类似于GIF格式的调色板技术,支持真彩色图像,并具备alpha信道(半透明)等特性。PNG 格式与其它图像格式相比较:PNG 格式与其它图像格式相比较:BMP(未压缩,档案大),GIF(非破坏压缩,但只能存 256 色
3、以下图档),JPG(破坏性压缩,压缩后的图档与原图不同)。PNG 提供了一个将图形档案大小压缩到极限以利网络传输,但又能保留所有与画像品质有关信息的解决方案。PNG 特 性:PNG 特 性:支持 256 色调色板技术以产生小体积文件 最高支持 48 位真彩色图像以及 16 位灰度图像。支持alpha信道的半透明特性。支持图像亮度的gamma校正信息。支持存储附加文本信息,以保留图像名称、作者、版权、创作时间、注释等作者:刘 宁 Email: 信息。使用无损压缩 渐近显示和流式读写,适合在网络传输中快速显示预览效果后再展示全貌。使用CRC循环冗余编码防止文件出错。最新的PNG标准允许在一个文件内
4、存储多幅图像。缺 点:缺 点:PNG虽然有是一个经过深思熟虑而规划出的档案格式,但它还是有不尽完美的地方:1、PNG不支持单个档案储存多张图片:知道动画GIF89a模式可以储存多张GIF图片在同一个档案中,如此可以在网页上做出动画效果。PNG则因为PNG GROUP坚持PNG是一个单张图片 的档案格式而不支持这方面的应用。不过PNG的Document中也有提到应用程序可以藉由自定chunk的方式来储存多张图片,不过这并不是一个标准,所以不具实用性。2、PNG不支持CYMK模式:CYMK色彩模式是应用于印刷出版的图档色泽表示法,PNG被界定为是一个专门用于跨平台网络传输的档案格式,PNG GRO
5、UP认为CYMK对于device的依赖性太重,所以PNG不支持CYMK,这使得将CYMK的图档转为PNG格式时,必须先将色彩模式转成RGB,否则便会发生色彩错乱的情形。3、PNG没有储存DPI信息:DPI是一种决定图文件打印品质的信息,例如300DPI就表示要将300 pixel 打印在一英吋的范围间。PNG GROUP也把这个视为是一种device依赖性大的信息,所以不予储存。2、制 作 图 像 2、制 作 图 像 图像绘制工具:图像绘制工具:在 Windows 平台下一般使用 Adobe 公司的 PhotoShop 软件,目前最新的版本是 9.0 在 Linux 桌面平台下我习惯使用 Gi
6、mp 这款图形处理软件 利用 GIMP 图像处理软件制作图像:利用 GIMP 图像处理软件制作图像:1.用 GIMP 加载已经画好的图象 如下:作者:刘 宁 Email: 图 2.1:图像加载 2、然后在图像窗口点击右键,然后选则 Layer,再选则透明,然后选择 Add Alpha Channel如下:图 2.2:选则图层透明 3.在工具栏选择魔术棒工具,选取需要变成透明的图像区域,然后单击右键,选择 Edit,然后选择清除,如下:作者:刘 宁 Email: 图 2.3:将选择区域变成透明 4存储图像文档,在菜单栏选择另存为,在出现的窗口中选择确定文件类型为 PNG 格式,保存完成。图 2.
7、4:存储图片文档 图 2.4:存储图片文档 作者:刘 宁 Email: 二、动画制作 二、动画制作 在编写程序之前,我们先要了解 Linux 平台下所使用的开发工具,SUN 官方推荐使用 NetBean 这个开发工具,所以我们要下载 NetBean 的 Linux 版本,然后下载J2ME SDK 的 Linux 版本,安装过程很简单,这里不作阐述。需要掌握的基础知识:需要掌握的基础知识:1、什么是动画?1、什么是动画?动画是游戏开发的基础,是一定要学习的重要知识。基本的动画,是将显示在画面上的角色等的动作与描绘位置作连续的变化,以产生动态的效果。如果你了解这种连续变化的表现方式,你就可以通过
8、J2ME 的相关方法来实现动画。2、什么是线程:2、什么是线程:所谓线程就是指程序的运行单位,使用线程将可以同时进行复数的处理。通过实例了解线程:通过实例了解线程:注:本文所有实例除特殊需要均未提供 MIDlet 类文件的源代码,请自行编写。注:本文所有实例除特殊需要均未提供 MIDlet 类文件的源代码,请自行编写。1、需要掌握的 java 相关类及接口 1、需要掌握的 java 相关类及接口?Runnable 接口 Runnable 接口 -Runnable 接口/Runnable接口非常简单,就定义了一个方法run(),继承Runnable并实现这个方法就可以实现多线程了,但是这个run
9、()方法不能自己调用,必须由系统来调用,否则就和别的方法没有什么区别了.主要方法:主要方法:-run()方法?Thread 类 Thread 类 -Thread 类 作者:刘 宁 Email: 主要方法:主要方法:-sleep(long time)方法 /时间延迟-start()方法/执行 runnable 接口的 run()方法?Timer 类 和 TimerTask 类 Timer 类 和 TimerTask 类 -TimerTask 类/是一个起到定时器功能的类 主要方法:主要方法:-run()方法/程序运行 2、线程的使用2、线程的使用 Java中实现多线程有两种途径:Java中实现多
10、线程有两种途径:?继承Thread类?实现Runnable接口?继承TimerTask类 (一)实现 Runnable 接口来创建线程:实现 Runnable 接口来创建线程:注注:将 Runnable 接口作为实现的类,必须将 Runnable 接口的 run()方法重新定义。在 run()方法中,将编写线程处理的内容。1)1)线程的创建,启动,运行与停止:线程的创建,启动,运行与停止:?线程的创建和启动 线程的创建和启动 运行线程必须用到 Thread 类,调用 Thread 类的 start()方法会自动执行Runnable 接口的 run()方法来启动线程。例:例:public cla
11、ss ThreadTestCanvas implements Runnable/实现 Runnable接口 private Thread th;/声明线程对象 ThreadTestCanvas()作者:刘 宁 Email: /以对象 Runnable 为参数,实例化 Thread 对象,创建线程 th=new Thread(this);/调用 Thread 类的 start()方法启动线程,执行 run()方法 th.start();?线程的运行线程的运行 run()执行代码 执行代码 执行代码?线程的时间等待方法 线程的时间等待方法 Thread 类提供了在指定时间内让程序处理等待的功能。T
12、hread.sleep(long mills)/以毫秒为单位时间延迟 例:例:Try /等待 500 毫秒 Thread.sleep(500);/下一个处理 Catch(Exception e)注:使用 sleep(long mills)方法是会产生异常。?线程的停止 线程的停止 线程在结束了 Runnable.run()方法内的处理之后就会停止。注:在 J2SE 中线程的停止方法,在 j2me 的 配置 中已经删除了。这个方法作者:刘 宁 Email: 由于会在 J2SE 中,会导致 SecurityException 异常的发生,所以才不被推荐使用。?线程的实例:线程的实例:myThrea
13、dTest.java 这个例子实现了利用循环在终端循环打印一个 int 型变量的累加运算(MIDlet 类省略)class myThreadTest extends Canvas implements Runnable private boolean isStopped;int i=0;myThreadTest()isStopped=false;public void doStart()Thread th=new Thread(this);Th.start();public void run()/编写线程的处理部分 While(!isStopped)myPrint();try Thread.s
14、leep(1000);catch(Exception e)public void myPrint()System.out.println(“*hello thread*“+i);i+;public void paint(Graphics g)g.setColor(255,255,0);作者:刘 宁 Email: g.fillRect(0,0,getWidth(),getHeight();(二)(二)Timer 类和 TimerTask 类的结合使用 Timer 类和 TimerTask 类的结合使用 J2ME 中自 MIDPv1.0 开始就提供了对定时器的支持。要使用定时器就要需要涉及到 TI
15、MER(定时器)类和 TimerTask(定时器任务)类。TimerTask 类是一个 虚类,用于实现一个具体的任务。Timer 类用于通过定期执行由 TimerTask对象表示的任务。要使用定时器功能,就必须从 TimerTask 类派生新类,并且重载 void run()方法,然后通过 Timer 对象来定时执行任务。过程抽象:过程抽象:1)import java.util.*;/导入这个包 2)class Test extends TimerTask/需要有一个类继承这 TimerTask 类 3)public void run()/重新定义 TimerTask 类的 run()方法 4
16、)Timer timer=new Timer();/生成一个 Timer 类的对象 5)timer.schedule(TimerTask task,long delay,long period)/调用这个方法,该方法第一个参数是一个TimerTask类型的对象,第二个参数是任务执行前等待的时间,第三个参数是任务执行时的间隔时间。注:注:TimerTask不用使用while()方法进行循环,因为他是定时刷新。但这样也有个问题,就是如果TimerTask的run方法写得过长,执行时间超过了设置的线程间隔时间,就会出现线程重叠的情况。线程重叠会造成诸如游戏速度突然加快等Bug。实例:实例:该实例主要
17、实现 Timer 类和 TimerTask 类的结合使用,程序运行后等待 5 秒钟,然后定时每隔 2 秒在终端输出一个 int 型变量的累加。?MIDlet 类:TimerMIDlet.java MIDlet 类:TimerMIDlet.java import javax.microedition.midlet.*;import javax.microedition.lcdui.*;public class TimerMIDlet extends MIDlet meCanvas mc;/*Creates a new instance of TimerMIDlet*/public TimerMI
18、Dlet()作者:刘 宁 Email: mc=new meCanvas();Display.getDisplay(this).setCurrent(mc);public void startApp()public void pauseApp()public void destroyApp(boolean unconditional)?TaskTimer 类:meTaskTimer.java TaskTimer 类:meTaskTimer.java import javax.microedition.lcdui.*;import java.util.*;public class meTaskTi
19、mer extends TimerTask int i=0;public meTaskTimer()public void run()System.out.println(abc+i);i+;?Canvas 类:meCanvas.java Canvas 类:meCanvas.java import javax.microedition.lcdui.*;import java.util.*;public class meCanvas extends Canvas Timer timer;meTaskTimer mtt;meCanvas()mtt=new meTaskTimer();timer=n
20、ew Timer();timer.schedule(mtt,5000,1000);public void paint(Graphics g)作者:刘 宁 Email: g.setColor(255,0,0);g.fillRect(0,0,getWidth(),getHeight();g.setColor(0,0,0);g.drawString(abc+i,getWidth()/2,getHeight()/2,0);利用线程技术实现动画:利用线程技术实现动画:(一)(一)需要掌握的相关类 需要掌握的相关类?Canvas 类-Canvas 类(画布)/Canvas类是所有低级用户组件的父类,我们通
21、过实现Canvas类的paint(Graphics g)方法来绘制屏幕,主要是使用Graphics类提供的各种方法。主要方法:-panit()panit()方法 /用于刷新页面 -rapaint()rapaint()方法/用于调用 paint()方法?Graphics 类及相关类 Graphics 类及相关类 -Graphics 类/可以把 Graphics 对象想象成一张白纸,通过调用这个对象的方法我们就可以在这张白纸上描绘出美丽的图画。主要方法:-setColorsetColor(int red,int green,int blue)-fillRectfillRect(int x,int
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 linux 操作系统 J2ME 动画 制作 入门
限制150内