您的位置:首页 > 其它

2d游戏循环滚动地图中的拼接缝隙问题

2016-06-12 00:09 351 查看
@废话在前

这个问题是我在用cocos2d-x做第一个2d游戏(ios多点触控实现玩家同时控制多架飞机的机战游戏)碰到的一个问题,两张交替滚动的地图之间出现了缝隙,当时第一感觉肯定是帧切换一帧的时间间隔造成的,想通过微调几个像素纠正结果解决不了,仔细分析了一下才知道了真正原因和正确的弥补方法。

问题原因和解决办法

2d游戏中通过两张可拼接的循环地图移动切换实现无限前进的效果,即游戏角色相对屏幕静止,地图相对屏幕移动,循环地图有分为横向地图纵向地图两种。



这里以纵向地图为例研究其实现原理和实际开发的问题:

如图(1)以屏幕中心为原点O建立坐标系,屏幕高度为H0,地图贴图高度为H,第一张地图Map1中心点位置P1,第二张地图Map2中心点位置P2,初始时两张地图拼合在一起放在屏幕某个位置,保证覆盖整个屏幕。

每一帧更新时将两张地图共同移动一定距离,即y坐标共同减小相同大小,距离越大速度越快,当Map1超出屏幕时,即 P1.y+H/2+H0/2<0 时,将Map1至于Map2之上,同理Map2执行相同逻辑操作实现循环滚动。

以上逻辑理想情况下可以达到图(5)中的无缝对接,但实际上会出现图 (4)中的缝隙,缝隙出现的原因是临界上下帧之间地图产生了一次以上的移动,导致对接错开一定距离,因此需要计算错开的距离offset,在对接时加入offset的移动实现真正无缝对接。

Map1超出屏幕时可能产生的offset(offset<=0)值:



@结论:在对接时将对接图片的y坐标额外加上offset即可实现校正,避免缝隙的出现。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: