2d游戏循环滚动地图中的拼接缝隙问题
2016-06-12 00:09
351 查看
@废话在前
这个问题是我在用cocos2d-x做第一个2d游戏(ios多点触控实现玩家同时控制多架飞机的机战游戏)碰到的一个问题,两张交替滚动的地图之间出现了缝隙,当时第一感觉肯定是帧切换一帧的时间间隔造成的,想通过微调几个像素纠正结果解决不了,仔细分析了一下才知道了真正原因和正确的弥补方法。
问题原因和解决办法
2d游戏中通过两张可拼接的循环地图移动切换实现无限前进的效果,即游戏角色相对屏幕静止,地图相对屏幕移动,循环地图有分为横向地图和纵向地图两种。
![](https://img-blog.csdn.net/20160611235620338?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
这里以纵向地图为例研究其实现原理和实际开发的问题:
如图(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)值:
![](https://img-blog.csdn.net/20160612000503164?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
@结论:在对接时将对接图片的y坐标额外加上offset即可实现校正,避免缝隙的出现。
这个问题是我在用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即可实现校正,避免缝隙的出现。
相关文章推荐
- 冒泡排序和快速排序
- Android-LayoutInflater学习
- linux阻塞与非阻塞,同步与异步、I/O模型
- Keil的使用方法 - 常用功能(一)
- nginx和tomcat的简单配置
- SQL注入
- 用DOS写一个简单的虚拟WIFI工具,CMD电脑无线WIFI工具,BAT实现WIFI和自动关机
- Linux下LAMP环境搭建
- shell的 关联数组 和 普通数组
- 磁盘管理—挂载文件系统
- Ubuntu下安装php7后无法启动Apache
- 第二次冲刺站立会议03
- AngularJS 风谲云诡的指令
- 启动oracle服务有三种方式:
- volatile
- 我是如何防止老公变成渣男的
- linux中驱动异步通知
- 临时记录
- Codeforces Round #356 (Div. 2) Jun/09/2016
- 女人的品位如何修炼