游戏地图无缝链接

前段时间在开发2D游戏地图,经过探索,实现了地图的无缝链接,今天抽空把基本思路记录下来,供分享和交流。

构建雄伟壮观的游戏场景,总少不了开阔的游戏地图做支撑。然而,抓襟见肘的内存资源总让游戏开发者苦恼不已。

一般处理以上问题的方法是:内存中只加载大地图的一部分,即当前区域地图,在玩家移动到地图边界后再切换到新的区域地图。通过这种方式,地图可以做得很大,但缺点是切换地图的加载过程需要玩家等待,体验感较差。

地图无缝链接的基本原理是通过缓冲加载,使玩家感觉不到地图的加载过程,并控制好内存中保留的地图大小,从而实现地图无限延伸的效果。

为实现以上方案,我们把一张大的地图分割为若干个同等大小的小地图,这些小地图是连续的,且称之为“区(zone)”,把玩家所在的区定义为center zone。

玩家登录后首先加载玩家所在的center zone,玩家移动的过程一直检测屏幕与center zone所有边界的距离,当发现屏幕移动到与某一边界的距离在设定的范围内时,开始加载这条边界所对应的zone,如下图。

 

上图是玩家向东北方向移动(8个方向操作的情况),这时检测到三个方向的边界都接近了,所以需要同时加载这三个zone,而加载的过程中,玩家还有一段距离的活动空间,只要玩家走完这段距离之前加载完成,玩家则不会感觉到地图的加载情况。玩家走进新的zone之后,必须把该zone设为center zone,然后依照同样的方法检测和加载新的zone。

当然,别忘了还有关键的一步:释放掉已经不需要的zone!依然以检测边界的方法,当center zone的某一边界已经离玩家屏幕超过设定的距离时,果断将其remove。

 

地图的无缝连接关键在于内存的控制,稍有不慎则可能造成内存溢出,除了控制好以上的步骤还需要衡量zone的规模和资源、数据量。使内存达到可持续地利用,对付再大的地图也只是游戏包和内容的问题了。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值