用户: 密码: 答案:   我要注册   忘记密码

加入收藏  设为首页

开发文档

CNJM首页

业界新闻

手机软件

终端应用

资源下载

EclipseME

CNJM论坛

                 

频道列表

J2ME开发 176篇
服务器端开发 33篇
JAVA语言 70篇
游戏与图形 101篇
WindowsMobile开发 6篇
Symbian开发 61篇
Brew开发 36篇
其它开发平台 6篇

热点文章

四种JAD生成器之比... 51597次
手机JAVA入门讲座 32060次
手机游戏毕业设计论文 28972次
各厂商SDK和模拟器... 19558次
一个关于CMNET和CM... 17565次
Java手机机型对应表 16927次
2005年毕业论文---... 16407次
手机JAVA MIDP2.0讲座 15733次
JAVA手机性能参数大全 13785次
手机JAVA中级讲座 12304次
J2ME程序开发新手...  11020次
我的第一个Java手...  10095次

文章搜索

搜 索
按 照
频 道
  
我的第一个Java手机程序
编辑:rocks    审核:rocks    文章来源:一剑震九州
关键词:无    发表日期:2007-08-25 01:22:38    浏览次数:10096次
本文版权归原作者,中国JAVA手机网收录本文的目的是让更多人阅读到此文章。转载请注明出处为中国JAVA手机网<www.cnjm.net>
来自:http://www.cnjm.net/tech/article4200.html

原文:http://blog.sina.com.cn/s/blog_56dee71a010007n8.html
JAVA手机网[www.cnjm.net]

  下午闲着没事,就看前段时间买的《Java手机游戏实例手册》,还到书上介绍的网站去下载了源代码。可是下载的源代码并不完整,例如第六章的源代码就只有第二节的那个程序,没有后面几节的程序;而且也没有后面讲解中用到的图片。于是只好自己在网上找图片,并且改写例子程序。本来我不太瞧得起这本书的,觉得它太简单了,买它只是想在无聊的时候打发下时间的,但是经过自己改写程序,才发现,要真正动手,才会注意到一些细节问题的;要做多了,才会熟悉。
   虽然这个程序在高手看来是过于简单的,但是这个是我学习Java手机游戏编程的第一个自己写的程序,我也不用怕被人笑话,把这么简单的东西放到博客上来,因为学习总是有个过程的嘛。这个是程序的运行图示:
JAVA手机网[www.cnjm.net]
   
540) this.width = 540'>
 
   功能很简单,仅仅是赵云骑着马不停地从屏幕左边走到右边。背景是用小图片拼接起来的,因为我把原图片处理得不好,所以上边一点还看得过去,下边就不对了。
   程序由两个文件组成:MyCartoonMidlet.java和MainCanvas.java。
   这是MyCartoonMidle.java的内容:

1    package mycartoon;
2    
3    import javax.microedition.midlet.MIDlet;
4    import javax.microedition.midlet.MIDletStateChangeException;
5    import javax.microedition.lcdui.Display;
6    
7    public class MyCartoonMidlet extends MIDlet {
8       public MainCanvas m_canvas;
9    
10      public MyCartoonMidlet() {
11          super();
12      }
13  
14      protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
15          // TODO 自动生成方法存根
16  
JAVA手机网[www.cnjm.net]
17      }
18  
JAVA手机网[www.cnjm.net]
19      protected void pauseApp() {
20      }
21  
22      protected void startApp() throws MIDletStateChangeException {
JAVA手机网[www.cnjm.net]
23          m_canvas = new MainCanvas();
24          if (null != m_canvas)
25          {
26              Display.getDisplay(this).setCurrent(m_canvas);
27              while(true)
28              {
29                  try
JAVA手机网[www.cnjm.net]
30                  {
31                      Thread.sleep(100);
32                      m_canvas.repaint();
33                  }
34                  catch(Exception e){}
35              }
36          }  
37      }
38   }


JAVA手机网[www.cnjm.net]


这是MainCanvas.java的内容:

1    package mycartoon;
2    import java.io.IOException;
3    import javax.microedition.lcdui.*;
4    import javax.microedition.lcdui.game.*;
5    
6    public class MainCanvas extends Canvas
JAVA手机网[www.cnjm.net]
7    {
8       public Sprite m_sprite;
9       public TiledLayer m_bk;
10      public LayerManager m_manager;
11      
12      MainCanvas()
13      {
14          Image image;        
15          try
JAVA手机网[www.cnjm.net]
16          {   /* 创建精灵并居中显示*/
JAVA手机网[www.cnjm.net]
17              image = Image.createImage("/zhao_yun.png");
18              
19              m_sprite = new Sprite(image,160,120);
20              m_sprite.setFrame(0);
21              
22              int x = 0;
23              int y = getHeight()/2 - 60;
24              m_sprite.setPosition(x,y);
25              
JAVA手机网[www.cnjm.net]
26              /* 创建背景图层*/
27              image = Image.createImage("/bk.jpg");
28              m_bk = new TiledLayer(4,8,image,60,40);
JAVA手机网[www.cnjm.net]
29              m_bk.setPosition(0,0);
30              setCells();
31          }
32          catch(IOException e)
33          {  
34              e.printStackTrace();
35          }
36          
37          m_manager = new LayerManager();
JAVA手机网[www.cnjm.net]
38          m_manager.append(m_sprite);
39          m_manager.append(m_bk);
40      }
JAVA手机网[www.cnjm.net]
41      /* 设置背景图层的各单元格*/
42      private void setCells()
43      {
44          int x,y;
45          
JAVA手机网[www.cnjm.net]
46          m_bk.setCell(0,0,2);
47          m_bk.setCell(1,0,3);
48          m_bk.setCell(2,0,4);
49          m_bk.setCell(3,0,5);
50          
51          for(y = 1; y < 8; y++)
52          {
53              for(x = 0; x < 4; x++)
54                  m_bk.setCell(x,y,6);
55          }
56      }
57      protected void paint(Graphics g)
58      {
59          int n,x;
60  
61          n = m_sprite.getFrame();            
62          n = (n+1)%6;
63          m_sprite.setFrame(n);
64              
65          x = m_sprite.getX() + 10;
66          if (x > 240) x = -160;
67          m_sprite.setPosition(x,m_sprite.getY());
68          
69          /*  
70          m_bk.paint(g);
71          m_sprite.paint(g);
72          */
73          m_manager.paint(g,0,0);
74      }
75   }
76  




说明:
 这是一个简单的Java Midlet 程序。Mid代表Mobile Information Device。Midlet这个名字大概跟Java Applet的命名类似。Applet程序都需要一个继承自Applet类的类,其中包含init(),destroy()等方法,Midlet程序也很类似地有一个继承自Midlet的类,其中含有startApp(),pauseApp(),destroyApp()等供系统回调的函数。这个还是比较容易理解的。
  第23到26行:创建一个MainCanvas对象,并将它设置为当前显示对象。
  第27到35行:每隔100毫秒进行一次刷新,实现动画效果。书上用的是while(true),作者实在是水平不咋的啊,难道不知道这样会不必要地使CPU占用率很高的吗。说句题外话,这书是“‘十一五’全国计算机应用与软件技术专业领域技能型紧缺人才培养培训教材”,我看这书的这种等级刚好适合很多计算机专业刚毕业的学生。如果各种收费很高的IT培训就是用这个作为教材的话,吾窃以为,不值得花钱去参加培训,买本书自学好了。
  第17到24行:创建精灵对象(骑马的赵云)并且设置其位置在画布中央。
  J2ME提供了Sprite类表示游戏中的精灵对象。Sprite类可以利用一幅图片生成活动的精灵对象。当然,这幅图像就是把动画的各帧放在一起了,Sprite类可以较方便地管理各帧。为了准备这幅图片,我还费了点心思的。(1) 先从网上找到了一个骑马的赵云的gif动画,第一个问题就是怎么把各帧提取出来,合并成一张图片。在网上搜索了一阵子,发现了一个实用的小工具:png超级伴侣pngmate。它可以提取gif动画的各帧,组合成一张图片,还可以方便地进行各种设置。可惜是个控制台程序。我打算有空的时候为它写一个简单的界面,把它包装起来。(2) 用pngmate把gif动画转换成一张图片后,先把显示精灵部分的程序写好,运行起来后才发现,精灵的白色背景没有去掉,显示效果不好。在网上搜索了好一阵子,也没有找到合适的工具。最后才发现,原来我一直用的TotalCmd文件管理器就有这个功能,我是有点舍近求远了。
  第27到30行:创建背景图层。m_bk = new TiledLayer(4,8,image,60,40);这句中前两个参数是图层的列数和行数,后两个参数是cell的宽度和高度,开始的时候我写好了程序,运行的效果却始终跟我想想的不一样。后来看了Java无线工具包文档才发现是参数的次序写错了。42行的setCells()函数设置各个cell显示的tiled的编号。Java WTK提供的这个TiledLayer还真是比较好用,实用的。
 第37到39行:创建图层管理器,将精灵对象和背景图层加入到图层管理器中。注意添加的次序,是从前往后依次添加的。如果说Z方向是沿屏幕向外的(向着人盯着屏幕看的眼睛,与视线方向相反),也就是沿Z轴负方向的次序依次添加。(这会儿发觉“视线”这个词好像跟“心理学”一样,虽然不正确,但是已经约定俗成了^_^)。
  第69到73行:注释掉的部分是不使用图层管理器时候的绘制代码。这个绘制次序跟把对象(图层)添加到图层管理器的次序相反。
来自:http://www.cnjm.net/tech/article4200.html

相关文章
   暂无相关文章
最新评论
皮蛋王 在 2007-11-16 20:21:22 发表的评论:
图片在哪下的呀,我找了好多精灵网站,根本找不到能用的图片。 
卓越的蚂蚁 在 2007-08-28 02:21:48 发表的评论:
多线程是否适合J2ME? 
网站简介  |  关于版权  |  广告服务  |  网站地图  |  联系我们
Copyright © www.CNJM.net, All rights reserved
中国JAVA手机网 版权所有
ICP备案:京ICP备041452