cocos2d android 1-android加载地图报异常

45度地图遮挡问题解决方案(cocos2d-x)
45度地图遮挡问题解决方案(cocos2d-x)
最近一直在做45度斜视角游戏,也就是isometric等容地图,俗称2.5D。地图上物体的前后遮挡是我遇到的第一个问题,总结一下处理方法。
遮挡问题(不知道术语),就是比如一个角色站在树后面,那么树要遮挡住角色的一部分,我是用实时修改zorder实现的。
1. 制作地图
用Tiled制作45度地图时,物体如何放在地图上有2种方法:
1.1 标记法:在地图对象层上标记出对象,并且指定该对象的类型。游戏加载地图时,遍历所有的对象,根据其类型,生成不同的精灵:主角、NPC、城墙、建筑等。生成的时候把zorder设置成该精灵所在的瓦块坐标的x分量和y分量之和。比如城墙在(10,20)这个瓦块上,那么其zorder就是10+20=30。
1.2 分层法:直接把物体画在layer上。思路是地图分为多层。假如地图x方向有m格,y方向有n格,那么地图要分成m+n-1层(正对屏幕,距离眼睛最近的一排瓦块是第m+n-1层,最远的时第1层)。这么分的原因是,每层的zorder都不同,第n层的zorder是n,所以就实现了离眼睛近的物体遮挡离眼睛远的物体。这个方法非常麻烦,不过能解决问题。把所有物体都放在同一层上,然后加载时特殊处理,肯定也能解决,以后再研究。
2. 角色移动
角色移动的时候,要在setPosition的同时修改zorder,示例代码如下:
virtual setPosition(const CCPoint& pos) {
// 调用基类的setPosition
CCSprite::setPosition(pos);
// 计算当前位置的瓦块坐标
_tilePos = _map-&realPosToTilePos(getPosition());
// 计算新的zorder
int tileZorder = tilePos.x + tilePos.y;
// 修改zorder
setZOrder(tileZorder);
这样,角色移动的时候,就能在不同的物体间相互遮挡了。
3. 大型建筑
采用标记法时,如果放置的物体是城墙,刚好占一个瓦块,则很容易处理。如果放置的物体是建筑,要占多个瓦块时,需要特殊处理:
3.1 我们在Tiled中标记出建筑的位置是(x,y),在代码中生成建筑时,其纹理(菱形)的顶点位置就在(x,y),这个是框架自己处理的。
3.2 根据建筑图片的宽,计算出该建筑占几个瓦块,要在导航图把这些瓦块都标记成&障碍&,否则自动寻路时会穿过建筑。
3.3 假如建筑的占的瓦块数是m*m,那么建筑的zorder是x+m/2+y+m/2,即建筑中心瓦块的zorder。
这样角色在建筑附近走动时就可以自然遮挡了。
4. 角色被挡住时显示透明轮廓
当角色走到障碍后面时,会被遮盖掉一部分甚至全部,这样不利于玩家识别角色。我想了一个浪费资源但是简单的方法:
即每个角色都有一个轮廓精灵,这个精灵和角色的大小相同、纹理相同、位置也相同。不同的是轮廓精灵是透明的而且zorder最高。所以当角色没有被遮盖时,轮廓精灵被角色覆盖,是看不见的,当角色被遮盖时,因为轮廓精灵的zorder最高,所以就能显示出一个透明的角色。
这个方法确实浪费资源,本来70M+的内存编程80M+,而且如果角色使用了骨骼动画可能就不行了。肯定有更好的方法,以后再研究。
Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。
用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。
Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。
Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。
产品设计是互联网产品经理的核心能力,一个好的产品经理一定在产品设计方面有扎实的功底,本专题将从互联网产品设计的几个方面谈谈产品设计
随着国内互联网的发展,产品经理岗位需求大幅增加,在国内,从事产品工作的大部分岗位为产品经理,其实现实中,很多从事产品工作的岗位是不能称为产品经理,主要原因是对产品经理的职责不明确,那产品经理的职责有哪些,本专题将详细介绍产品经理的主要职责
IThao123周刊浏览器不支持嵌入式框架,或被配置为不显示嵌入式框架。}

我要回帖

更多关于 cocos2d android 打包 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信