小例子学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);
绘制一条红色的直线和一个蓝色的矩形框。如下图所示:
别小看这些方法,有时你看到一些游戏中的对话框的边框效果就是通drawRect和fillRect来实现,还有加载页面的进度条也可以利用他们来实现。下边我们看一下进度条的实例:
//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图片(直接找的Gameloft的LOGO图片,请见谅)的小例子。
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,实际开发中还常用到drawRegion,drawRGB,以及NOKIA UI API的drawPixels。
完整代码下:
http://www.xun6.com/file/1d2c9f228/J2ME_Game_02_src.rar.html
使用和上一节一样,把相关例子下src的所有文件复制到你的J2ME项目的src目录即可调试运行。