J2ME开发的一些体会

一.学习J2ME需要的基础知识
J2ME本身是Java语言的一部分,因此,对Java语言有一定了解是必要的,而Java语言本身是面向对象编程的一种语言,因此,对类与对象的概念要有必要的了解,而这些内容在本文中就不进行介绍了。另外,本文行文中对API的介绍很简略,因此,读者应该自己多查阅API中的相关内容。
二.J2ME开发环境简介
J2ME的开发环境如前文所述,目前主要有JBEclipseWTK三种方式,其中前面两者都是集成开发环境,在编程上比较方便,有智能联想等功能,而WTK相对只提供了手动编译和打包,并且没有Debug功能。但WTK不需要多余的配置,对各种模拟器可以说是即插即用,而且在WTK下的程序目录简洁明了,方便查询。这几种开发环境各有长短处,所以大家可以自己选择,不过对新手来说,还是建议采用WTK,因为刚接触J2ME开发,与其把时间花在配置上,还不如花在编程上。
三.J2ME程序流程
我的感觉,每门语言都有自己的固定格式,就跟写文章的几要素一样,总有开头,结尾等等。而了解一门语言的格式,是学习这门语言最先要掌握的内容。
如果把程序流程比做是一个管道工程的话,那么每门语言里都有一个管道的入口,在J2ME里,这个入口就是MIDlet类,这个类一般也称为J2ME的主类,每个程序,都有一个或多个固定的主类,在这里,我们只谈一般的情况,即只有一个MIDlet主类的情况,大家看API即可知道,MIDlet类有几个固定方法,startApp(),pauseApp(),destroyApp(),这些方法就像是管道工程(以下的讲述里,我都把编程比作是管道工程)中的几个关键阀门,一个J2ME程序启动后,便先经历MIDlet的构造方法,然后进入startApp()方法,当有特殊情况挂起的时候,便会进入pauseApp方法,当程序结束时,便经由destroyApp方法退出。一个J2ME程序可以没有其他类,但不能没有MIDlet类,只要有一个完整的主类,便是一个完整的J2ME程序。比如非常精典的"HelloWorld",便只有一个MIDlet

我觉得, J2ME实际上是一个很标准的顺序流程语言, J2ME中没有真正的多线程,很多情况下,一个 J2ME程序的运行,我们都可以对他的流程进行完全的跟踪。这在调试方面是非常方便的。

在这里还要解释一点, J2ME程序中,屏幕对象是一个比较重要的对象,你的所有操作,你所要表达的意思,都需要在屏幕上描绘出来,因此,对屏幕的操作也是最基本和最重要的一个操作,因此, J2ME程序的操作其实就是对 DisplayDisplay上的 Displayable(包括 FormTextBoxListCanvas等等)对象进行控制。也就是说,让程序在合适的时候,把需要的 Displayable显示在屏幕上。使用的方法,即是 Display.setCurrent()方法。

在屏幕对象的操作上,我要解释一下, J2ME默认的屏幕只有一个,即是当前屏幕,所有操作都是对当前屏幕进行操作,因此,当你在主类中将一个 Canvas对象设置为当前屏幕后,则主类已经处于脱屏状态,脱屏状态下的对象无法进行直接操作。这一点需要注意。所有外界的操作均只能作用于当前屏幕上显示的 Displayable对象,无论是 FormList,或者是 Canvas。此时对脱屏类的操作只能通过静态方法或者是该类的一个实例来进行。

J2ME的游戏中最简单的一种游戏流程是这样,即一个主类和一个 Canvas类,主类入口处定义一个 Canvas对象,并且此 Canvas对象继承一个 Runnable接口,再定义一个基于此对象的线程,然后将此 Canvas对象设为当前屏幕对象,并启动线程,即用线程的 start()方法,启动线程后, Canvas里的 run方法便开始运行,而 run方法通常要用 repaint()方法来刷屏,因此流程就是按 paint()->run->paint().....这样的过程往复,其中如果还有键盘输入,则 keyPressed()等方法就穿插在中间。基本上 J2ME的程序就是按这样的流程来走,因此在开发和调试中只要对这个流程进行必要的跟踪就可以了。
四.J2ME中常用的类
J2ME中常用的类有 MIDletFormListCanvasStringCommand,Graphics等等。
其中 Graphics作为游戏开发中的核心类,自然需要熟练的掌握。
Graphics中如下的重要方法需要掌握:
setColor(int 设置的颜色 )
setFont(Font 设置的字体 )
drawRect(int 起点坐标 x,int 起点坐标 y,int ,int )
fillRect(int 起点坐标 x,int 起点坐标 y,int ,int )
drawImage(Image 要画的图形对象 ,int 起点坐标 x,int起点坐标 y,int 基点类型 )
drawLine(int 起点坐标 x,int起点坐标 y,int 终点坐标 x,int 终点坐标 y)
drawString(String 要写的字符串 , int 起点坐标 x,int起点坐标 y,int 基点类型 )
在这里要说明一下什么是基点类型,基点是标志你设置的起点坐标在整个要绘制的对象(不论是图像还是文字)中的位置,如左上,右下,正中间等等。
常用的值有 020:左上, 17:正中间, 24:右上, 36:左下, 40:右下。

除此之外,还有几个重要方法
addCommand,removeCommand,这两个方法是对Command的添加和取消的操作,很常用。
而谈到Command,自然就要涉及到commandListener这个接口,按钮的监听需要通过这个接口来进行,也就是要重载接口中的commandAction()方法。不过在使用这个接口的时候,不要忘了对当前的对象设置setCommandListener(this)。
另外,对于String类,substring方法应该掌握
而对于Form这些高级控件,可用方法不多,看看API即可。
五.J2ME中的线程
J2ME中的线程是 Thread类,而实现线程有两种方法,一种是继承 Runnable接口,一种是 TimerTimerTask。而不管是哪种线程,其本质都是在运行其中的 run方法。在这里要注意, Runnable接口的 run方法和 TimerTaskrun方法又是不同的,因为他们的运行机制不同。 Runnable接口是靠线程的休眠或等待来实现线程的刷新,而 TimerTask是按照事先给定的时间间隔来自动刷新。对 Runnable接口,一旦 run方法结束后,则线程就结束了,因此 Runnable线程里的 run方法要写成循环方式,一般是 while(isRunning)的形式,要结束的时候把 isRunning设为 false,而 TimerTask则不用,因为他是定时刷新。但这样也有个问题,就是如果 TimerTaskrun方法写得过长,执行时间超过了设置的线程间隔时间,就会出现线程重叠的情况。线程重叠会造成诸如游戏速度突然加快等 Bug
Runnable接口定义的线程里,有两种等待方法,一种是 wait,一种是 sleep,如果使用 wait方法,则要注意在线程 run方法里,用 synchonized标志符将该线程设置为同步锁定状态,否则会出现 java.lang.IllegalMonitorStateException异常,大致意思是线程当前请求的监视器对象不能响应,因为被别的线程占用了。

线程在 J2ME里非常重要,一切动态效果(当然这是游戏的前提)都是通过线程来操作,因此,对线程的控制是值得研究的一个问题。如何优化代码,使线程能够在足够短的间隔时间内正常刷新,换言之,这就是大家讨论的 FPS问题。程序优化做得好,则线程间隔时间可以足够短,使得 FPS可以足够高,游戏的流畅度当然就越高。
六.J2ME开发中的好习惯
1.       多写注释,完备的注释不管是对你自己,还是对别人,都是很有好处的,在调试中也会起很大的帮助。
2.       在重要流程的各个环节设置一些监听点,其实很简单,就是用 symstem.out.println()来输出一些标志符号就可以了,这样可以监听你的程序在运行的时候,走到哪一步。
3.       不要写太多的类,尽量整合资源,不用的变量或者方法,尽量去掉。
4.       熟练掌握各种常见的异常,不要太依赖于问别人和翻书,这些应该是一个合格的程序员应该熟练于心的东西。
5.       对不熟悉的类,应该多写小代码来实验其用法,别人讲的永远不如自己研究出来的结果牢靠。一.学习 J2ME需要的基础知识
J2ME本身是 Java语言的一部分,因此,对 Java语言有一定了解是必要的,而 Java语言本身是面向对象编程的一种语言,因此,对类与对象的概念要有必要的了解,而这些内容在本文中就不进行介绍了。另外,本文行文中对 API的介绍很简略,因此,读者应该自己多查阅 API中的相关内容。
二.J2ME开发环境简介
J2ME的开发环境如前文所述,目前主要有 JBEclipseWTK三种方式,其中前面两者都是集成开发环境,在编程上比较方便,有智能联想等功能,而 WTK相对只提供了手动编译和打包,并且没有 Debug功能。但 WTK不需要多余的配置,对各种模拟器可以说是即插即用,而且在 WTK下的程序目录简洁明了,方便查询。这几种开发环境各有长短处,所以大家可以自己选择,不过对新手来说,还是建议采用 WTK,因为刚接触 J2ME开发,与其把时间花在配置上,还不如花在编程上。
三.J2ME程序流程
我的感觉,每门语言都有自己的固定格式,就跟写文章的几要素一样,总有开头,结尾等等。而了解一门语言的格式,是学习这门语言最先要掌握的内容。
如果把程序流程比做是一个管道工程的话,那么每门语言里都有一个管道的入口,在 J2ME里,这个入口就是 MIDlet类,这个类一般也称为 J2ME的主类,每个程序,都有一个或多个固定的主类,在这里,我们只谈一般的情况,即只有一个 MIDlet主类的情况,大家看 API即可知道, MIDlet类有几个固定方法, startApp(),pauseApp(),destroyApp(),这些方法就像是管道工程(以下的讲述里,我都把编程比作是管道工程)中的几个关键阀门,一个 J2ME程序启动后,便先经历 MIDlet的构造方法,然后进入 startApp()方法,当有特殊情况挂起的时候,便会进入 pauseApp方法,当程序结束时,便经由 destroyApp方法退出。一个 J2ME程序可以没有其他类,但不能没有 MIDlet类,只要有一个完整的主类,便是一个完整的 J2ME程序。比如非常精典的" HelloWorld",便只有一个 MIDlet

我觉得, J2ME实际上是一个很标准的顺序流程语言, J2ME中没有真正的多线程,很多情况下,一个 J2ME程序的运行,我们都可以对他的流程进行完全的跟踪。这在调试方面是非常方便的。

在这里还要解释一点, J2ME程序中,屏幕对象是一个比较重要的对象,你的所有操作,你所要表达的意思,都需要在屏幕上描绘出来,因此,对屏幕的操作也是最基本和最重要的一个操作,因此, J2ME程序的操作其实就是对 DisplayDisplay上的 Displayable(包括 FormTextBoxListCanvas等等)对象进行控制。也就是说,让程序在合适的时候,把需要的 Displayable显示在屏幕上。使用的方法,即是 Display.setCurrent()方法。

在屏幕对象的操作上,我要解释一下, J2ME默认的屏幕只有一个,即是当前屏幕,所有操作都是对当前屏幕进行操作,因此,当你在主类中将一个 Canvas对象设置为当前屏幕后,则主类已经处于脱屏状态,脱屏状态下的对象无法进行直接操作。这一点需要注意。所有外界的操作均只能作用于当前屏幕上显示的 Displayable对象,无论是 FormList,或者是 Canvas。此时对脱屏类的操作只能通过静态方法或者是该类的一个实例来进行。

J2ME的游戏中最简单的一种游戏流程是这样,即一个主类和一个 Canvas类,主类入口处定义一个 Canvas对象,并且此 Canvas对象继承一个 Runnable接口,再定义一个基于此对象的线程,然后将此 Canvas对象设为当前屏幕对象,并启动线程,即用线程的 start()方法,启动线程后, Canvas里的 run方法便开始运行,而 run方法通常要用 repaint()方法来刷屏,因此流程就是按 paint()->run->paint().....这样的过程往复,其中如果还有键盘输入,则 keyPressed()等方法就穿插在中间。基本上 J2ME的程序就是按这样的流程来走,因此在开发和调试中只要对这个流程进行必要的跟踪就可以了。
四.J2ME中常用的类
J2ME中常用的类有 MIDletFormListCanvasStringCommand,Graphics等等。
其中 Graphics作为游戏开发中的核心类,自然需要熟练的掌握。
Graphics中如下的重要方法需要掌握:
setColor(int 设置的颜色 )
setFont(Font 设置的字体 )
drawRect(int 起点坐标 x,int 起点坐标 y,int ,int )
fillRect(int 起点坐标 x,int 起点坐标 y,int ,int )
drawImage(Image 要画的图形对象 ,int 起点坐标 x,int起点坐标 y,int 基点类型 )
drawLine(int 起点坐标 x,int起点坐标 y,int 终点坐标 x,int 终点坐标 y)
drawString(String 要写的字符串 , int 起点坐标 x,int起点坐标 y,int 基点类型 )
在这里要说明一下什么是基点类型,基点是标志你设置的起点坐标在整个要绘制的对象(不论是图像还是文字)中的位置,如左上,右下,正中间等等。
常用的值有 020:左上, 17:正中间, 24:右上, 36:左下, 40:右下。

除此之外,还有几个重要方法
addCommand,removeCommand,这两个方法是对Command的添加和取消的操作,很常用。
而谈到Command,自然就要涉及到commandListener这个接口,按钮的监听需要通过这个接口来进行,也就是要重载接口中的commandAction()方法。不过在使用这个接口的时候,不要忘了对当前的对象设置setCommandListener(this)。
另外,对于String类,substring方法应该掌握
而对于Form这些高级控件,可用方法不多,看看API即可。
五.J2ME中的线程
J2ME中的线程是 Thread类,而实现线程有两种方法,一种是继承 Runnable接口,一种是 TimerTimerTask。而不管是哪种线程,其本质都是在运行其中的 run方法。在这里要注意, Runnable接口的 run方法和 TimerTaskrun方法又是不同的,因为他们的运行机制不同。 Runnable接口是靠线程的休眠或等待来实现线程的刷新,而 TimerTask是按照事先给定的时间间隔来自动刷新。对 Runnable接口,一旦 run方法结束后,则线程就结束了,因此 Runnable线程里的 run方法要写成循环方式,一般是 while(isRunning)的形式,要结束的时候把 isRunning设为 false,而 TimerTask则不用,因为他是定时刷新。但这样也有个问题,就是如果 TimerTaskrun方法写得过长,执行时间超过了设置的线程间隔时间,就会出现线程重叠的情况。线程重叠会造成诸如游戏速度突然加快等 Bug
Runnable接口定义的线程里,有两种等待方法,一种是 wait,一种是 sleep,如果使用 wait方法,则要注意在线程 run方法里,用 synchonized标志符将该线程设置为同步锁定状态,否则会出现 java.lang.IllegalMonitorStateException异常,大致意思是线程当前请求的监视器对象不能响应,因为被别的线程占用了。

线程在J2ME里非常重要,一切动态效果(当然这是游戏的前提)都是通过线程来操作,因此,对线程的控制是值得研究的一个问题。如何优化代码,使线程能够在足够短的间隔时间内正常刷新,换言之,这就是大家讨论的FPS问题。程序优化做得好,则线程间隔时间可以足够短,使得FPS可以足够高,游戏的流畅度当然就越高。
六.J2ME开发中的好习惯
1.       多写注释,完备的注释不管是对你自己,还是对别人,都是很有好处的,在调试中也会起很大的帮助。
2.       在重要流程的各个环节设置一些监听点,其实很简单,就是用symstem.out.println()来输出一些标志符号就可以了,这样可以监听你的程序在运行的时候,走到哪一步。
3.       不要写太多的类,尽量整合资源,不用的变量或者方法,尽量去掉。
4.       熟练掌握各种常见的异常,不要太依赖于问别人和翻书,这些应该是一个合格的程序员应该熟练于心的东西。
5.       对不熟悉的类,应该多写小代码来实验其用法,别人讲的永远不如自己研究出来的结果牢靠。

作者Blog http://gophinight.blogchina.com/986648.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值