小例子学J2ME手机游戏开发――(二)图形和图像处理

小例子学J2ME手机游戏开发――(二)图形和图像处理

原创 58prince http://blog.csdn.net/prince58 转载请注明出处。

 

手机游戏开发中,界面的表现是一个很重要的部份,我们常常会遇到很多问题,如要制作透明效果,爆炸效果等等,这些都是由Graphics来处理的。这一节我们讲一些几个基础Graphics方法,其实很多特效也是由一些基础方法混合使用做出来的。

-、绘制图形基元

现在我们在上一节的代码上加上:

            g.setColor(0xff0000);

            g.drawLine(70, 52, 120, 52);

           

            g.setColor(0x0000FF);

            g.drawRect(20, 80, 160, 80);

绘制一条红色的直线和一个蓝色的矩形框。如下图所示:

 

别小看这些方法,有时你看到一些游戏中的对话框的边框效果就是通drawRectfillRect来实现,还有加载页面的进度条也可以利用他们来实现。下边我们看一下进度条的实例:

      //draw LoadingBar

     

      public static void drawLoadingBar(Graphics g,int left, int top,int width,int width2 )

      {  

          g.setColor(0x95750D);

          g.drawRect(left-1, top, width+2, LOADING_BAR_HEIGHT+2);

        

          for (int i=0; i<LOADING_BAR_HEIGHT-1;i++)

           {  

             g.setColor(0xEC5700);//这个地方稍微修改一下,如加个颜色的数组就可以画出有颜色过度的进度条,color[i]

             g.drawLine( left+1, (top+2)+i, (left+1)+(width2-2), (top+2)+i);

           }

      }

效果如图所示:

    

详细的请自行参看完整代码,这里不再做讲解。

二、绘制文本

上节我们也演示了绘制文本的方法(drawString),这种方法就是系统提供的方法,绘制的是系统字,所以在不同的手机上有时会有不同的效果,字体的效果也不是很理想。所以现在很多游戏中都使用图片字来代替系统字,好处是可以统一字体风格,不好的就是会增加包的大小,需要消耗一些内存。

三、绘制图像

Graphics另一个比较常用的方法就是图像处理(drawImage),J2ME设备上基本上都用PNG格式的图片,也支持一些其他格式的图片。这个地方是初学者提问比较多的地方,很多情况下他们的问题都是由图片的位置不对引起的。

这里需要说明一点,很多程序员继承了一些J2EE方面的思想,转做J2ME时会不自觉的对代码、资源进行分门别类,代码会使用Package管理,资源放在res目录下,有时还是多建几个子目录来存放不同类型的资源。不过J2ME上并不建议用这种方法,因为每多一层package就会多一些资源,所以我基本上把所有的代码和资源都放在src目录下。

(1)、好,现在看我们做一个在屏幕上画LOGO图片(直接找的GameloftLOGO图片,请见谅)的小例子。

static Image s_logoIamge = null;//添加一个image的成员变量。

 

 

      protected void paint(Graphics g) {

 

            ……      

            if (s_logoIamge==null)

            {

                  try

                  {

                        s_logoIamge = Image.createImage("/logo.png");

                  }catch (Exception e) {

                        e.printStackTrace();

                  }

            }

            else

            {

                 g.drawImage(s_logoIamge, 240>>1, 320>>1, Graphics.VCENTER|Graphics.HCENTER);

            }

                 

      }

 

效果如下图:

 

 

drawImage 前先断判断一下s_logoIamge是否为空,为空就先加载图片。这样做的好处是避免多次载入图片。

 

(2)、我们前面画LOGO的基础上多加一 setClip 即可以实现一个简单的动态现示logo的效果。这个setClip也是要经常用到的一个功能,把图片拼成动画效果也需要用到它。

 

            if (s_logoIamge==null)

            {

                  try

                  {

                        s_logoIamge = Image.createImage("/logo.png");

                  }catch (Exception e) {

                        e.printStackTrace();

                  }

            }

            else

            {

                  g.setClip(34, 137, (s_paintCount%172), 44);

                 g.drawImage(s_logoIamge, 240>>1, 320>>1, Graphics.VCENTER|Graphics.HCENTER);

            }

 

 

效果图片如下:

 

  

 

这里我们只解绍了画图像的一个基础方法drawImage,实际开发中还常用到drawRegiondrawRGB,以及NOKIA  UI  APIdrawPixels

 

完整代码下:

http://www.xun6.com/file/1d2c9f228/J2ME_Game_02_src.rar.html

 

使用和上一节一样,把相关例子下src的所有文件复制到你的J2ME项目的src目录即可调试运行。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值