WAP之家:为您提供最全最新的WAP技术,CP.SP.3G等行业资讯。 WAP之家交流论坛全新开放 点击进入>>
WAP资讯 | 3G动态 | SP动态 | 运营商动态 | 内容商动态 | 制造商动态 | 论坛讨论>> 每次自动访问
WAP技术 | WAP源码 | 手机编程 | 手机源码 | 无线技术 | J2ME技术 | 手机软件 添加到收藏夹
IVR技术 | SP资料 | SMS MMS技术 | 商业方案 | IVR下载 | 书籍教程 | 工具软件 语言:繁體中文

WAP之家技术文章J2ME技术进阶教程j2me游戏引擎的基本构成--场景管理器

j2me游戏引擎的基本构成--场景管理器
作者:点轻烟  来源:j2medev  发布时间:2005-11-3 14:04:25
ry
{ //载入资源 getResourceAsStream=刚才的s1
InputStream inputstream = I.getClass().getResourceAsStream(getResourceAsStream);
//噢,找到啦,刚才那个什么getWidth的数组不是存了整数吗?难道整个文件后面还有东西?
//不用说了,那个数组记录的是文件的偏移量而index记录了大小,这样一切就都明白了,
inputstream.skip(getWidth[i1] + hasNextElement);
abyte0 = new byte[indexOf[i1]];
inputstream.read(abyte0);
inputstream.close();
inputstream = null;
}
catch(Exception exception) { }
System.gc();
return abyte0;
}

从上面的代码我们不难总结出,首先将所有的“道具”的大小和位置保存下来有多么大的好处。但是他也有它的限制,如果大家就这样然后一味的生搬硬套到自己的项目中那你就惨了,如果“道具”比较大比如地图数据之类的还好说,很长时间调用一回I/O,如果是一些小文件光I/O操作就能搞死手机。所以我们因该想出更好的解决方案,就是让那个addRecord可以接受一个数组,在不超出heap size的情况下调入多个文件。代码我就不给出了,有了上面的代码大家很容易就可以做出来。或许比GameLoft更好也说不定哦


呵呵,从理论到实践,我们走出第一步。我并不主张大家就照本宣科的把人家的东西拿来就用,也许有人说,晕,这么简单,对!在你做出来之前都是困难的!只要用心,只有想不到没有做不到!

上面的问题我们已经解决掉了,但是如何调度最快最省时间?这是个人者见人,妖者见妖的问题,一般要根据项目的需求来做,如果是一个RPG游戏,剧情节奏缓慢,就没有必要把好多资源一起载入,仅把需要的载入即可。而一个剧情发展迅速,对速度要求较高的空战游戏我们最好还是尽最大程度将“道具”资源载入较好。

从我的叙述中似乎对场景管理器的“管理”方面叙述不够多,我也注意到了嘿嘿。其实场景管理器除了从库房调入“道具”并加入自己的“道具”列表,更重要的一个工作就是在合适的时候将道具放回库房,释放自己能控制的“空间”并从“道具”列表中删除。那么我们怎么样才可以实现呢?这个问题也比较挠头,笔者曾经做过一些探索,但效果不甚理想。我的方案就是对当前“剧务”所能控制的每个道具进行使用频率计算,使用过就+1,在一定频率内没有使用就-1,直到变成0就释放掉,效果不是很理想。于是回归原始,每段游戏完毕后就将资源手动回收一次,呵呵。这样虽然有悖于引擎的宗旨,但的确是效率最好的。

汗!虽然本节讲的是“场景管理器”,可更多的叙述了场景资源的调度,其实这么讲是有原因的。在j2me中所谓“管理”最有可能就是用数组来实现的,所以管理方面显得就比较薄弱,而资源的调度则可能是N个函数和变量组成。先前我也说过理论与实现的关联和差距,但可以肯定地一点是由理论带动实践开发才是快速提高自身水平之路。理论不正确,方向就会错误,弯路就成不可避免的了。

上一页  [1] [2] 

[] [返回上一页] [打 印]
文章评论

用户名: 查看更多评论

分 值:100分 85分 70分 55分 40分 25分 10分 0分

内 容:

         (注“”为必填内容。) 验证码: 验证码,看不清楚?请点击刷新验证码