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

来源:互联网 发布:淘宝福利晒图店家 编辑:程序博客网 时间:2024/05/16 18:20

@废话在前


这个问题是我在用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即可实现校正,避免缝隙的出现。

0 0