- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
07_OPhone平台2D游戏引擎实现——地图系统
通过前面几篇文章的学习,我们也完成了引擎的大部分内容了,也可以来开发一些简单的游戏了,现在大家可以想象一下,我们现在需要做一个叫大型的RPG游戏,游戏中需要有多张不同的地图场景,如果我们将每一个场景都做成一张大的图片,可能就非常的浪费空间了,虽然现在的手机性能越来越好,但是过多的资源同样会影响游戏的效率,而且关于的地图的碰撞检测也就很麻烦了,那么解决这类问题的办法,通常就是使用瓦片地图。瓦片地图瓦片地图就是将一整张大的地图切成x*y个小的格子,每个格子中填入一个地图元素,这样来构成一张大的地图,对于这些地图的拼合通常都不需要程序来做,可以有策划通过地图编辑器来完成;关于地图编辑器,目前免费的也很多,比如:mapwin和Tiled等,基本可以实现地图的编辑功能了,如果实在觉得这些免费的地图编辑器不能满足需要(比如你要在地图中加入一些关卡脚本之类的),那么可以考虑自己编写一个地图编辑器。通常一个游戏都会有一个地图编辑器。关于地图编辑器的编写不是我们本文的内容,所以大家可以自己去查看一些资料,下面我们先简单的说一下地图的构成,首先需要一个地图元素的图片资源,如图7-1所示。图7-1 地图元素该图片是被拆成了2*4行小的地图元素,他们对应的索引如代码清单7-1所示。代码清单7-1:地图元素/article/show/299view plain/article/show/299copy to clipboard/article/show/299print/article/show/299?1,2?3,4?5,6?7,8?当然也有的地图编辑器将第一个设置为0,依次类推,这样我们就可以使用上面这些索引来完成一个地图,我们就爱你过地图定义为一个二维数组,如代码清单7-2所示。代码清单7-2:地图数组/article/show/299view plain/article/show/299copy to clipboard/article/show/299print/article/show/299?byte[][]?map?=?{{1,1,1,1,1,1},{2,4,7,8,3,2},{4,5,2,4,5,6},{4,5,6,8,1,4}};???然后再绘制地图时就根据这个地图数组中的每一个元素所对应的地图元素资源中的图像即可。这样就大大的节省了资源所占用的空间,同时如果要进行碰撞检测也就可以直接根据地图数组中的元素是否是可行走区域来区分了,很方便的就能完成简单的碰撞检测,所以这也是我们在游戏开发中最常用的一种处理地图的方式,当然对于同时绘制这么多小的地图元素,同样存在效率问题,那么就可以考虑采用不同的地图优化技术,比如:卡马克算法等。地图图片集(TileMapAtlas)从图7-1我们可以看出这个地图资源图片实际上就是我们之前给他家介绍的图片集对象,这里有一点需要注意,该图片上的每一个地图元素都会对应一个唯一的地图索引,并且这个图片的宽度和高度尺寸都需要是我们的每一个单独的地图元素(title)的整数倍,这样我们在计算图片的行和列时才不会出错,该引擎中我们将具有这样一个功能的对象封装成一个类TileMapAtlas,该类被看成一个AtlasNode节点,继承自AtlasNode,具体实现入代码清单7-3所示。代码清单7-3:TileMapAtlas?/article/show/299view plain/article/show/299copy to clipboard/article/show/299print/article/show/299?//地图图片集 ?public?abstract?class?TileMapAtlas?extends?AtlasNode?{?//图片集索引的位置 ??protected?HashMapLong,?Integer?mPosToAtlasIndex;?//需要渲染的地图元素 ??protected?int?mItemsToRender;?//构造(资源ID,title宽度,title高度) ??protected?TileMapAtlas(int?resId,?int?tileWidth,?int?tileHeight)?{?super(resId,?tileWidth,?tileHeight,?0);??this.mPosToAtlasIndex?=?new?HashMap(this.mItemsToRender);?}?//计算要渲染的地图元素的个数 ??private?void?calculateItemsToRender()?{?int?width?=?getHorizontalTileCount();?int?height?=?getVerticalTileCount();?this.mI
文档评论(0)