欢迎来到天天文库
浏览记录
ID:31367301
大小:109.00 KB
页数:6页
时间:2019-01-09
《手机游戏开发中图像像素操作方法的应用》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、手机游戏开发中图像像素操作方法的应用 摘要:随着J2ME在移动设备开发上应用的增多,游戏开发已成为当前的主要应用领域之一。然而,在MIDP1.0中,只有利用特定厂商API(如Nokia)方可实现图像的像素操作。随着手机开发功能的增强,在MIDP2.0中,利用两种方式直接进行图像像素操作,实现图像的透明度渐变功能,并从实验角度对这两种方法进行比较。 关键词:手机游戏;像素;透明度 中图分类号:TP317.4文献标识码:A文章编号:16727800(2013)002013602 0引言 近年来,手机游戏业务全面崛起,手机游戏已经成为整个视频游戏领域发展速度最快的部分。现在,不管是在地铁
2、里,还是机场的候机大厅,经常可以看到很多人通过玩手机游戏来打发时间。由于不同的手机具有不同的操作平台,因此开发手机游戏相对比较困难。在众多开发手机游戏的技术中,Java的“一次编译、到处运行”以及平台的无关性使它理所当然地成为手机游戏开发的首选,而J2ME由于开发速度快、周期短、支持手机多、开发资源丰富等优点成为当今较受欢迎的手机开发平台。 在利用J2ME进行手机游戏开发时,通常我们需要一定的特效,如游戏“夏日大冒险”6,在游戏开始时,需要一闪屏Logo,而此Logo的特效是图像的逐渐淡出,也即图像透明度渐变的问题。实现特效最常用的方式是利用多帧图像,但由于手机内存较小,而图像往往对内存占
3、用量较大,这对开发者来说是一个难题。本文从编码的角度,利用图像像素操作方式来实现透明度渐变的特效。 1图像像素操作方法的思路与实现 1.1思路 为实现图像的像素操作,首先要能获取出已有图像的像素0xAARRGGBB,然后利用alpha通道将图像设置为全透明状态,再使用多线程技术,反复修改图像的alpha值直至其到达目标值,并在屏幕上将图像进行重绘,实现图像的逐渐清晰化。 1.2代码实现 基于上述思路,本文依据Sun公司提供的API,用两种方式来实现上述方法。 方法一:利用图像的颜色像素直接在屏幕上进行图像的绘制。具体如下:利用Image对象的getRGB()方法,获取原始图像的所
4、有像素存到一个整形数组中,并将其赋值给渐变图像的一个整形数组中;随后利用位操作实现渐变图像的所有像素为全透明,在paint()方法中利用Graphics对象的方法实现渐变图像的绘制工作,在run()方法中改变渐变图像的每一个像素(alpha值每次加1),直到图像像素达到原始值,则线程运行结束。关键代码如下: (1)获取图像的像素并设置alpha为透明: srcImage.getRGB(srcImgRGB,0,imgW,0,0,imgW,imgH); for(inti=0;i5、} (2)游戏主循环: for(inti=0;i>>24; //原始图片的对应像素的alpha值 intoldAlpha=(srcRgbImage\[i\]&0xff000000)>>>24; if(alpha6、(shadowRgbImage\[7、i\])&0x00ffffff);} } try{ Thread.sleep(100); }catch(InterruptedExceptione){ e.printStackTrace(); }6 repaint(); //当所有像素达到原始值时,线程运行结束 if(!changed) { break; } } 方法二:利用动态图像实现静态图像的颜色渐变。具体如下:同第一个方法一样,首先也是利用Image对象的getRGB()方法,获取原始图像的所有像素存到一个整形数组中,然后利用位操作(&0x00ffffff)实现图像的所有像素为全透明,接着利用Image类的8、静态方法createImage()创建一个和屏幕大小一样的可交互图像immuteImage并获取其Graphics对象ga,在paint()方法中绘制可交互图像,在run()方法中基于srcImgRGB,利用Image的静态方法createRGBImage()创建Image对象faddingImage并进行绘制,逐渐修改原始图像像素的alpha值,直到alpha值为255时,即退出程序。关键代码如下: (1
5、} (2)游戏主循环: for(inti=0;i>>24; //原始图片的对应像素的alpha值 intoldAlpha=(srcRgbImage\[i\]&0xff000000)>>>24; if(alpha6、(shadowRgbImage\[7、i\])&0x00ffffff);} } try{ Thread.sleep(100); }catch(InterruptedExceptione){ e.printStackTrace(); }6 repaint(); //当所有像素达到原始值时,线程运行结束 if(!changed) { break; } } 方法二:利用动态图像实现静态图像的颜色渐变。具体如下:同第一个方法一样,首先也是利用Image对象的getRGB()方法,获取原始图像的所有像素存到一个整形数组中,然后利用位操作(&0x00ffffff)实现图像的所有像素为全透明,接着利用Image类的8、静态方法createImage()创建一个和屏幕大小一样的可交互图像immuteImage并获取其Graphics对象ga,在paint()方法中绘制可交互图像,在run()方法中基于srcImgRGB,利用Image的静态方法createRGBImage()创建Image对象faddingImage并进行绘制,逐渐修改原始图像像素的alpha值,直到alpha值为255时,即退出程序。关键代码如下: (1
6、(shadowRgbImage\[
7、i\])&0x00ffffff);} } try{ Thread.sleep(100); }catch(InterruptedExceptione){ e.printStackTrace(); }6 repaint(); //当所有像素达到原始值时,线程运行结束 if(!changed) { break; } } 方法二:利用动态图像实现静态图像的颜色渐变。具体如下:同第一个方法一样,首先也是利用Image对象的getRGB()方法,获取原始图像的所有像素存到一个整形数组中,然后利用位操作(&0x00ffffff)实现图像的所有像素为全透明,接着利用Image类的
8、静态方法createImage()创建一个和屏幕大小一样的可交互图像immuteImage并获取其Graphics对象ga,在paint()方法中绘制可交互图像,在run()方法中基于srcImgRGB,利用Image的静态方法createRGBImage()创建Image对象faddingImage并进行绘制,逐渐修改原始图像像素的alpha值,直到alpha值为255时,即退出程序。关键代码如下: (1
此文档下载收益归作者所有