游戏开发中的 LBS 和 Cocos2d-X 技术实践

  • 薛梁

2016 年 9 月 13 日

话题:DevOps语言 & 开发架构AI

在纽约的帝国大厦,在加州的 St. Monica 海滩,在澳大利亚的歌剧院,在英国的议会街,全世界都在为PokémonGo小精灵们疯狂。假如,我们可以在北京的长城上,重庆的嘉陵江畔,兰州的黄河岸边,西安的钟鼓楼,来一场 LBS 游戏的话,想想是不是都觉得很炫酷?

9 月 10 号下午,由 InfoQ 与高德开放平台联合举办的高德 Inside 技术沙龙活动上,高德开放平台总经理童遥、北京指间互动 CTO 郭聪、地球入侵 CTO 钟博,以及 ERA 创始人 &CEO 徐可,介绍如何利用高德地图 SDK 与定位 SDK 解决 LBS 手游开发难题,分享游戏开发结合地图定位技术背后的经验教训与实践成果,并在现场演示已成形的 LBS 游戏开发 Demo。

LBS 技术在游戏开发中有哪些实践?

这里简述一下高德开放平台,其免费为合作伙伴提供开发工具,覆盖领域包括社交媒体、社交出行、新闻资讯等行业。高德 LBS 技术能力在游戏行业能给开发者、用户带来哪些合作机会,以及什么样的创新体验方式?针对这些问题,童遥会给出一些答案。

高德在很多方面都有数据收集,除了游戏行业,有超过 12 年的经验在做整体地图数据的研发和相关的制作工作,通过多种数据预采集、数据挖掘的形式,保证每天为用户提供的数据准确性。那么高德 LBS 技术和游戏怎样结合起来才能擦出火花呢?童遥以说,如果 PokémonGo 在中国落地的话,LBS 与游戏结合会有哪些需求及痛点呢?1. 地图底图的定制化;2. 地图上如何实现游戏场景;3. 渲染效率如何提升?从数据和 SDK 两个方面来解决这个问题,高德能够给游戏行业的三类 SDK:

  • 定位 SDK-这并不是大家普遍认为的 GPS 定位,高德自有一个定位的 SDK。
  • 地图 SDK-基于地图的游戏场景,展示给用户的无论是标准地图还是渲染地图,都属于地区 SDK 范畴。
  • 搜索 SDK-用户使用这个能力来搜索高德平台里的数据,比如在这里搜索周边的餐饮。用户也可以用这个接口去搜索自己的数据

高德 LBS 能为游戏行业量身定制什么样的解决方案呢?

  • 实现玩家位置定位:定位 SDK(移动端)、高精度 IP 定位(PC、移动浏览器);
  • 游戏场景地图化:自定义地图更改、自定义添加 Marker 样式;使用 OpenGL 接口,添加 Overlay 模型;离线地图减少游戏过程中的瓦片数据传输;筛选适合游戏场景的 POI;玩家指定坐标,计算两点地理距离。
  • 玩法多样化:给出多种路线方案,指引游戏玩家到达目的地;查找附近玩家、玩家动态及事件功能;

此外,高德地图通过绘制高度统一的虚拟现实地图,来处理特殊任务及副本触发。同 POI 一样,在 AOI 上可以将地图和游戏进行结合。比如在面向一些群体用户,如大学生群体,可以将北京大学这个 AOI 同某个特定的任务奖励链接起来,用户在进入北京大学之后,完成特定的任务,得到特殊的任务奖励。在做一些特别的游戏运营时,以某个公园作为一个特定副本,用户进入则副本触发,完成后可以得到游戏中奖励以及线下奖励。

在最后,童遥也讲到了高德地图在其他方面的一些措施,包括通过低耗电地理围栏和运动状态监测,让开发者更了解玩家,也能更好地利用玩家的碎片时间产出更多价值。利用高精智能定位,提升游戏体验。通过室内定位和室内地图,除了 WIFI 和蓝牙定位,还会有一些室内的传感器,通过这些传感器可以精准定位到几楼。

基于Cocos2d-X 的LBS 游戏开发实践

郭聪是北京指间互联网科技 CTO,很早就开始了手游《城市精灵》的制作开发,基于高德提供的稳定的 LBS 支持、地图的渲染和地图解析服务,帮助游戏在后期获得了很好的口碑和用户数量的提升。在演讲中,郭聪主要从游戏的技术层面介绍了 Cocos2d-X 技术。

对于技术选型有哪些思考?《城市精灵》是基于地图的模式,通过地图来获取周围 POI 信息,有一些精灵依赖于时间、依赖于天气,每个用户根据自己的位置制定不同的路线,有些用户为了抓住特定的精灵,会开发各种副本来进行 POI 搜索。Cocos2d-X 的引擎和高德地图本身自有的独立渲染引擎在合作过程中会产生很多冲突,怎么解决?不同于早期端游 GS 方式的开发,手游最早选择 CI 来进行。后来向 Lua 转变,它能够把 CI 的模块做到 Lua 里面。游戏语言选择 C++ 与 Lua 共舞模式,游戏的核心还是要用 C++ 来写,功能是 Lua 来做。

关于跨平台开发的问题,iOS 和 Android 各开发一套的成本比较高,不现实。所以选择一个非常好的跨平台开发引擎就 OK 了,《城市精灵》团队用苹果原生的支持,直接转向了 Cocos2d-X 的地图。包括像地图引擎现在是 iOS 和 Android 两套分开开发的,地图本身可能会牵扯到很多底层的渲染和定位,地图上如果能够提供非常好的跨平台地图模式,其实对很多 LBS 使用者来说会有很大的提升。

这里来介绍一下 LBS 技术架构,通过 POI 服务器和用户位置服务器来服务一个游戏服务器,放弃直接定位 SDK 里面 POI 的反馈,而是通过网络爬虫来做 POI 的服务器。用户位置是另外一个服务器,它可以做非常高频的查询、插入和修改。作为一个基于 LBS 的游戏它有一个大的问题,因为用户是在全国各地的,对地理位置的要求较高,如果能把所有的游戏玩家放到一个服务器里来,不让用户感到孤单。

依据地图引擎的支持,它帮助完成地理信息服务。地理信息服务包括两个层次,第一是地图本身的显示,就是架构整个用户和游戏,和 LBS 整个核心的桥梁。最核心的就是地图解析。游戏本身不只需要手机端的引擎,还需要一些外部引擎,通过一整套的融合完成 LBS 的玩法。

那么如何将高德地图与 Cocos2d-X 融合?首先是要解决 OpenGL 冲突问题,根源在于不同的 OpenGL 渲染环境,最典型的现象就是贴图纹理冲突。郭聪说,解决方案有跨帧切换、截图伪造、动画特效、屏幕适配等等。

最后,郭聪还描述了高德地图接下来与 LBS 指间有哪些新的玩法的设想,例如地理位置的解析,就是把线上的位置和线下的位置进行关联,获得省份、城市、街道和建筑的信息都会给玩家带来不一样的体验。其次就是信息服务这一块,高德地图有一个功能,它有一些预警,对于堵车、交通事故、限行、团购等提前告知。如果能将这些信息提供给游戏玩家的话,既可以提高用户粘性,也可以打通地图和玩家之间的关系。

由于篇幅限制的原因,这里就不对现场 demo 演示的信息进行介绍了,大家可以后期观看演示视频。

DevOps语言 & 开发架构AI