`
djun100
  • 浏览: 166309 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

j2me画图

 
阅读更多

游戏开发中,很多图,比如数字美术图0-9,精灵各个桢图,都放一张png图里去。然后就有了以下api绘图讨论:
第一种:midp1.0中,用setClip设置特定裁剪区,配合drawImage去画,然后又setClip放回原来未画时的裁剪区。画时,图如果是x*y像素,setClip完,还是要遍历(循环)x*y,所以效率不高。
第二种:J2me资源利用,只要有提高的空间,人们都会努力去改进。Midp2.0后,有了裁图api,Image.createImage(Image image, int x, int y, int width, int height, int transform),可以从大图中裁出一个个小图出来,如果原图是透明的,裁出来也是透明的。这样一来,每次画图时,直接调用drawImage把想画的块图画出来就行了。比如画数字美术图9527,只要预先把0-9各个图裁出来放内存,画数字9,5,2,7,共4张图搞定。试想用midp1.0去画,不仅要不断setClip,还要每次都去画这张整图(0-9),共4次整图,midp2.0显然效率提高了不少。
参考《手机游戏开发全书》
第二种绘图方式,理论是绝对美妙,绝对正确的。而在实际开发中,绝对要慎用。绝不是因为有机器还不支持midp2.0(当今用来玩游戏的手机,绝绝绝大部分都支持mipd2.0)。真正原因有下两点:
1我们再回去看看第二种方法,有没发现其中的问题?显然,这就是空间与效率的矛盾问题了,提高了效率,占用了内存。(手机内存这里指运行java程序时的可用的最大的堆栈内存)。手机内存并不充裕,把每张整图切碎放内存,很多机型就吃不消了。一个再好的游戏,在电脑里开发出来,模拟器上测试很爽很爽的,如果不能放在手机里运行,放在主流手机里运行,说白了不能被大众使用的手机上运行,就不能赚钱,就是失败的游戏!相信有不少公司在用动作编辑器--印度人开发的MotionWelder吧,利用它自带的类去读.anu文件时,它就会这样切图的哦,可要小心了。
2在真机上测试时,用midp2.0的Image.createImage(Image image, int x, int y, int width, int height, int transform),手机上画出来的效果,在很多机型上,支持得很好。在所有品牌中,目前的经验告诉我,索爱是对sun标准支持得最最完美。可是就有些机型可没那么爽哦。像nokia的n73系列,有时会出一白底边;你要是放在nokia7370系列中,非常的不幸,全部都有不明所以的颜色的底边,根本不透明!号称支持2.0 ,实际上支持得不完美。
综上可知,第二种方式慎用。
用第一种方法画图,当然足够应付所有机型的画图需求了。同时,我们再看看第一种方法,再看看它的效率,是不是效率真的低得很?这种效率不高,实际上不会特别不高:jvm画时,如果发现不在裁剪区内的,就不画,而画每一张图,都是一个个像素点画出来的,画点时很耗资源的,不画就是不消耗资源,只是多了个判断在不在裁剪区而已,画点比起判断来,效率相差甚远。因而第一种方法效率其实差不了很多。
同时第一种方法告诉我们,画图时,用setClip设置裁剪出刚好游戏屏幕大小的区域,会提高效率哦。
历史是否就停滞不前了?只用midp1.0的第一种绘图方法了?当然也不是。第一种方法需要不断用setClip设置裁剪,烦得要命,画完还得设置回原来没裁剪的区域。Midp2.0提供了drawRegion方法,为我们提供了很好的解决方案。drawRegion可以等于setClip和drawImage。并且在效率上,两者差不多。当然drawRegion同样也不是万能的,在nokia 7610系列画图时,如果做了翻转,速度会很慢,这时用nokia的DirectGraphics可以解决,当然效率有所提高,但不会提的特别高。用drawRegion不翻转速度是很快的。目前的经验告诉我,仅仅是7610系列对drawRegion翻转时会慢一些,其他没有。用drawRegion可放心。
在开发中,如果还要适配nokia7610系列(这些手机用户目前还是有很多的哦),本身这机型cpu就不快,尽量不要做翻转绘图。宁愿让美术多做一方向的图。当然,图多,图碎,可以提高速度,也可以增加内存,降低可移植性,这都是要均衡的了。
既然是讨论,当然会有争议,所以,如果可以,欢迎网友提不同观点,共同讨论。

分享到:
评论

相关推荐

    J2ME实现画图程序

    这是我开发的J2ME实现画图程序,希望大家能互相学习交流

    j2me游戏代码

    j2me画图,加建筑物,实现对象行走。

    J2ME 图片按钮,很好的DEMO

    里面是用J2ME UI Canvas 将一图片画成三分,并做为三人按钮,最重要的是,画一选择框去选择,哪个按钮并响应,所选择的按钮事件。

    Android游戏移植

    在手机游戏中程序要处理的主要有游戏界面(UI),按键,数据保存,游戏算法。游戏算法是用java语言...区别也不是很大,J2ME游戏移植到Android上主要要改的就是 画图,画文字,按键,数据保存的代码,其它的基本不用改。

    android 开发游戏框架

    此框架不是很复杂,主要是关于: 1,按键处理 2,加载资源 3,线程控制刷屏 4,画图[onDraw(canvas g)] 真爱生命 远离J2ME

    学习Java基本语法 存放学习Java文件和Java代码.rar

    应用软件:word ,ppt,画图板,… 人机交互方式: 图形化界面 vs 命令行方式 应用程序 = 算法 + 数据结构 2.计算机语言的发展迭代史 第一代:机器语言 第二代:汇编语言 第三代:高级语言 面向过程:C,Pascal、...

    j2meCanvas小例子程序

    // 画图函数为Canvas里的抽象函数,必须重写,画布出现时自动调用 protected void paint(Graphics g) { System.out.println("paint") ; } // 重写,画布放在最前端自动调用 public void showNotify(){ ...

    雨桥-手机版函数作图软件

    本软件是继Function之后的手机版函数作图软件,画图精度高,操作简便,可移植性好,可运行于绝大多数手机平台。同时还新增了隐函数处理算法,可表达一般显式函数所不能表达的图像,如圆的标准方程。最后,本软件的...

    【原创】新版发布 nge2 PSP新版类库

    画图性能:单张图片 图片 效率 512*512*16 450fps 512*512*32 250fps 特点: 1 支持16位(RGBA5650 RGBA5551 RGBA4444)/32位(RGBA_8888)显示。 2 支持JPG,BMP(24,32位),PNG,TGA(24,32位)图片读取,并转化到...

    Google Android SDK开发范例大全(完整版)

    余志龙,来自于手机制造业、电视媒体业、网络、电信产业、软件开发等领域,擅长嵌入式系统软件设计、J2ME游戏开发、Android开发,以及J2EE、JSP、Servlet、JavaBeans、PHP、C#等程序语言,熟悉面向对象技术与Eclipse...

Global site tag (gtag.js) - Google Analytics