转载要注明作者、出处哟。转自:http://leestorm.iteye.com/blog/900514
前段时间在做可以兼容J2ME和Android的ARPG引擎,获得一些心得。2D手机游戏似乎画面上没什么突破,几乎都是靠美工把地图画得华丽一些,然后加一些云朵、光晕的贴图,再弄点下雨、下雪啥的,已经见怪不怪了。看了一些前几年的PC游戏,同样是2D,像暗黑就有模拟的光照效果,场景有明暗之分,人物也阴影效果。目前手机游戏有点类似当年的形态,当然即时是现在的手机也无法与当年的PC性能抗衡。要在2D手机游戏上实现这些效果肯定要降低效果的质量。
先来说阴影,原理其实很简单,比如要给一个人物精灵绘制阴影:
1)将精灵原图按比例拉伸、旋转
2)转换成带alpha效果的黑色图片
3)绘制到人物脚下
OK!既然这么简单,立马实现到现有的游戏中去看看效果!
结果,效果是出来了,速度却慢得惊人,由于是即时绘制,在我的N85上帧速只有5~8左右,这还只是一个人物精灵的绘制,如果给每个NPC都加上阴影……嗯,你懂的。
好吧,这可是即时运算,我们得找找影响CPU发挥的瓶颈在哪:
1)图像的拉伸、旋转网上有很多算法,什么插值法、扫描法……前辈们总结了很多,这可是在虚拟机上跑,过高的时间复杂度,甚至涉及浮点运算肯定会让速度大打折扣。
2)还有,获取原图的RGB信息,经过一系列的翻转、拉伸,然后新建个动态图像,把RPG值转成黑色填进去,再调整alpha值,再贴到指定位置……这么折腾N85居然能做到5帧,太给力了!
了解了瓶颈所在,下面停止扯淡,介绍一下我的优化方法:
跳过拉伸、旋转操作,每帧都做这么大开销的操作就是手机电池也不会答应。我们可以直接扫描图像的RGB信息,扫描到非透明的RGB值时计算出对应点的位置(计算这里涉及三角函数,为了提升性能以及兼容MIDP1.0,建议用查表法)。跳过新建图像以及alpha调整的操作,我们可以预先建立好一个半透明的黑色影子图片来贴图。
coding...经过一系列的折腾,效果出来了:
感觉还不错吧?场景中有4棵树绘制了阴影,N85实机帧数是20上下。(这是WTK2.5的模拟器截图,由于还开启了引擎的模拟明暗效果,所以帧数下降到了12。)
等等,N85在主流J2ME手机里算不错的,一个影子效果就让PFS降到了20,那以后加上模拟水波、模拟光照、模拟天气等等效果,不是得卡死?嗯……让我来进一步优化,不过这次可就要稍微降低一些影子的质量了:
逐个像素扫描图片,运算量也是相当惊人的,80x32的一棵小树就要判断2560次!我们可以间隔着扫描,比如扫描某行RGB信息时,扫描1个像素然后跳过下面4个像素再扫描下一个,这样影子效果可能有一些偏差,但是大致轮廓还是很清晰的。(如果扫描的像素非透明就用准备好的半透明影子图片绘制一个1x4的影子,跳过接下来4个像素继续扫描,继续绘制……)来看效果:
跳过2个像素
跳过4个像素
FPS提升了5倍!好吧,你应该有所启发,横向、纵向扫描越过几个像素完全由你控制,我们可以理解为扫描精度。来更进一步优化,即便是跳着扫描,仍然需要判断很多次,而我们只是要获得精灵的大致轮廓,画出阴影而已。我们完全可以从图片的两边扫描不透明点的起始位置,然后计算不透明区域的长度,根据这个长度直接贴图!
好吧,光放几张鸟图,不贴代码是不厚道的,下面是影子绘制部分的核心代码(写的比较烂,望海涵):
查表法求三角函数:
最后,有一个问题值得注意,细心观察自然界的影子,其实并不是直接旋转一下原图的效果,而是根据光源的位置投影而来的。网上有些那原图直接翻转的方法其实是错的,本文的方法也不太正确,但至少在2D游戏里看上去像那么回事,哈哈,看图为证~
刚开始在这写点东西,技术不足还请多多指教。我对J2ME、Android游戏开发很感兴趣,望有朋友能一起交流QQ:350751373。
分享到:
相关推荐
echarts2D地图实现3D阴影效果,以山东省为例。附:最新版山东地图(济南、莱芜合并后)。由于该资源设计get请求,请将该资源放到服务器上运行。
《Unity3D\2D手机游戏开发(第2版)》以实例教学为主线,循序渐进地介绍了Unity在游戏开发方面的不同功能。第1章,由零开始,引导读者熟悉Unity编辑器的各个功能模块,这部分内容对Unity程序员、美工和策划都有帮助...
制作UNITY2D平面游戏的灯光阴影,类似战争迷雾类似,
Unity 3D/2D手机游戏开发(金玺曾)(第2版)版本5.x,分卷是csd限制,完整版,第2版。
资源名称:大富翁手机游戏开发实战基于Cocos2d-x3.2引擎内容简介:李德国编著的《大富翁手机游戏开发实战(基于 Cocos2d-x3.2引擎)》使用Cocos2d-x游戏引擎技术,带领读者一步一步从零开始进行大富翁移动游戏的开发...
Unity3D 2D手机游戏开发 第二版下
资源名称:COCOS2D手机游戏开发飞机大战 实战案例 教程内容:1.COCOS2D 飞机大战 实战案例-项目简介2.COCOS2D 飞机大战 实战案例-改变项目场景大小3.COCOS2D 飞机大战 实战案例-欢迎界面背景4.COCOS2D 飞机大战 ...
本书以实例教学为主线,循序渐进地介绍了Unity在游戏开发方面的不同功能 是第2版
本书以实例教学为主线,循序渐进地介绍了Unity在游戏开发方面的不同功能。第1章,由零开始,引导读者熟悉Unity编辑器的各个功能模块,这部分内容对Unity程序员、美工和策划都有帮助。 第2~4章是3个不同特色的3D游戏...
如何用cocos2d开发android游戏,以夸品太的手机游戏开发为主线,围绕着cocos2d引擎浅如深处的简绍android游戏的开发.
cocos2d-x手机游戏开发,是一本介绍cocos2d游戏引擎,已经如何扩平台开发手机游戏的书。由于上传大小的限制,分成6个压缩包,不好意思。第6卷。
《cocos2d-x 手机游戏开发 》徐松林著 源码
Unity 3D手机游戏开发 金玺曾.pdf,扫描版很清晰,适合游戏开发者参考。
高清带目录《Box2D物理游戏... 《Box2D物理游戏编程初学者指南》最后,通过大量的游戏效果模拟,直截了当地介绍相关知识点的实际应用,这些游戏包括《愤怒的小鸟》《叫醒盒子》《跨越重力》《星星大盗》《割绳子》等
Cocos2d-JS开发之旅 从HTML5到原生手机游戏随书资源源码
图片添加阴影效果,支持自定义,可以下载源码自己做修改
这里包括Cocos2d-x的核心类CCDirector、CCScene、CCNode、CCLayer、CCSprite、CCAction等,通过案例来介绍Cocos2d-x的场景、图层、交互、动作、动画、粒子效果、游戏地图、物理引擎,并详细介绍了Cocos2d-x 2.2.1...
Cocos2d-JS开发之旅 从HTML 5到原生手机游戏 PDF 带书签目录 完整版
Unity3D 2D手机游戏开发 第二版
即时战略游戏2D引擎vb版 牛人开发的