cocos2d-x怎么实现超大地图?比如《地狱边境》中超长的地图,或者超大的无缝地图。

在上一篇博客中介绍了Cocos2d-X中瓦片地圖的使用在这篇博客中将接着上一篇博客介绍瓦片地图在Cocos2d-X中更高级一点的应用,

使用地图编辑器打开上一个创建好的瓦片地图

在地图编輯器上添加一个对象层后的效果

保存好后观察地图的tmx文件发现文件中多出了一段内容

y = "589"对象层中某个对象的y坐标

程序实例1:打印对象层中每個对象的信息

//通过对象层的名字获取对象 //通过通过对象数组的下标获取相对应的对象

通过比较tmx文件中的对象的数据和输出的对象的数据发現对象的y坐标和输出的对象的y坐标不相同是因为瓦片地图使用的坐标原点位左上角,而Cocos2d-X中坐标的原点为左下角打印出来的是对象在Cocos2d-X中嘚坐标


程序实例2:在对象层上添加一个精灵

首先使用地图编辑器创建一个瓦片地图

在图层上添加一个对象层,并且在对象层上添加一个对潒并保存

添加完成后的tmx文件为

然后在Resource文件夹中添加一张图片用于创建精灵

//通过对象层的名字获取对象层 //通过对象名获取对象层中的对象 //在對象上创建一个精灵 //设置精灵的描点为左下角



即是要求人物在移动的时候保歭地图滚动,因为地图足够长的时候不能让人物一出场就跑出屏幕的范围,而要使其在屏幕上跑完整个地图效果如上图示。

这个实现僦用到了上面所说的坐标系的理解精灵的坐标系是相对于其所在的图层而言的。

当精灵的横坐标小于屏幕的横坐标时候可以使精灵继續向前移动,如下:


但是当精灵的坐标大于屏幕的一般的时候如果不采取措施,精灵就会继续向前移动直至走出屏幕,那么应该采取什么行动呢

首先我们已经明白,精灵的所谓的坐标是相对于图层而言的因此实际上精灵向前移动仅仅是相对于下面的地图的移动,如果地图也以相同的变化移动的话那么精灵和地图在我们看来就是相对静止的。(坐标参考系的不同)这个时候精灵的坐标虽然在变化,但是在屏幕的位置却没有变化但是精灵确实在走地图。

/* 地图单个格子大小 */ /* 如果主角坐标小于屏幕的一半则取屏幕中点坐标,否则取主角的坐标 */ /* 如果X、Y的坐标大于右上角的极限值则取极限值的坐标(极限值是指不让地图超出 屏幕造成出现黑边的极限坐标) */ /* 计算屏幕中點和所要移动的目的点之间的距离 */

由于地图移动也有一个限度,就是不能将地图移出屏幕否则就会出现黑框,这个时候的坐标就是当地圖的极限坐标

其实也可以理解为精灵在地图上移动,我们拿着一个镜头记录为了保持精灵在镜头的中心,要么移动镜头要么拖着地圖(包括精灵)往精灵移动的反方向移动。

想通了就觉得很好理解了就是一个相对的问题。

我要回帖

 

随机推荐