V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Game Engines
Unreal Engine
MyCryENGINE
LucasW
V2EX  ›  游戏开发

请教关于游戏地图生成的问题

  •  
  •   LucasW · 2017-11-27 17:17:37 +08:00 · 4561 次点击
    这是一个创建于 2588 天前的主题,其中的信息可能已经有所发展或是发生改变。
    使用 cocos 引擎。
    需要大概 9000 * 9000 像素宽高的地图,同时需要寻路,地图内大概有 500+ 动态节点。
    请教各位这样的地图该怎么设计,我们测试了在虚拟物理格子上根据玩家的移动做九宫格拼接的方式,没有完全解决问题。
    各位大佬有没有更成熟的方法推荐的。
    15 条回复    2017-11-28 17:42:46 +08:00
    moyaka
        1
    moyaka  
       2017-11-27 17:40:13 +08:00 via Android   ❤️ 1
    最近尝试了一下 Mapbox Unity。cocos 就不知道了。
    noli
        2
    noli  
       2017-11-27 18:04:20 +08:00   ❤️ 1
    放弃格子, 不使用静态切分地图的数据结构,使用例如 R 树 之类的空间数据结构。
    寻路也不使用格子,而是每个地图制作拓扑点。
    linus3389
        3
    linus3389  
       2017-11-27 18:15:29 +08:00   ❤️ 1
    LucasW
        4
    LucasW  
    OP
       2017-11-27 18:16:35 +08:00
    @noli 大佬,没有听懂啊,能简单点解释下吗
    LucasW
        5
    LucasW  
    OP
       2017-11-27 18:17:30 +08:00
    @linus3389 主要纠结在大地图性能问题,寻路算法很成熟
    noli
        6
    noli  
       2017-11-27 18:51:32 +08:00
    @LucasW

    哪里没听懂? 提供几个关键字,你自己搜集一下资料做对比吧。
    R 树,KD 树,四叉(八叉)树。

    我倒是好奇,你的寻路怎么做,格子有多大,9000 像素 500+ 单位寻路居然性能不成问题?
    moyaka
        7
    moyaka  
       2017-11-27 18:53:34 +08:00 via Android
    @LucasW 他意思大概是地图用矢量的不要用栅格的,类比即时渲染和 CG。
    cinextio
        8
    cinextio  
       2017-11-27 19:02:59 +08:00 via Android
    Tiled Map?
    afpro
        9
    afpro  
       2017-11-27 22:54:33 +08:00   ❤️ 1
    大型地图寻路还是 navmesh 吧 动态物体可以考虑用 local avoidance 会快很多
    LucasW
        10
    LucasW  
    OP
       2017-11-28 10:13:17 +08:00
    @cinextio Tiled 渲染是即时的吗?寻路的话 Tiled 数据有没有方案?
    LucasW
        11
    LucasW  
    OP
       2017-11-28 10:15:19 +08:00
    @noli 不是以像素作为寻路点的,不然还了得。寻路格子大概 100 * 100 像素.
    koalli
        12
    koalli  
       2017-11-28 13:51:57 +08:00
    @LucasW 这个性能问题具体是指什么?
    LucasW
        13
    LucasW  
    OP
       2017-11-28 14:02:50 +08:00
    @koalli 我现在遇到的问题是地图增大,节点会增多,帧率下降
    koalli
        14
    koalli  
       2017-11-28 15:37:12 +08:00   ❤️ 1
    @LucasW 有几点比较常见的优化点你可以参考一下:
    1、看看 DrawCalls,DrawCalls 过高的话你得降低同时渲染的节点数,Unity 可以用 Camera 来剔除 GameObject ( creator 好像也支持了),我用 cocos2dx 的时候是把屏幕外的节点尽可能的设置成不可见,如果剔除后 DrawCalls 还是很高,可能得减少同时显示的节点了
    2、批量渲染,我记得 cocos2dx 从 3.3 开始应该是自动批量渲染了,但是好像是有个什么限制
    3、上面也有哥们吐槽了性能居然不成问题,那应该数据结构有做过优化了,那么你可以优化一下节点的使用,比如类似 Unity 对象池(Object Pool)之类的方法来管理节点
    cinextio
        15
    cinextio  
       2017-11-28 17:42:46 +08:00 via Android
    Tiled map 你可以通过代码改变某个方格的贴图,自动寻路就是一套算法。你自己查查,我以前(两三年,3.x 的版本)用时,cocos2dx 对 tiled map 大小支持有限制,现在应该好一些了吧。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1043 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 23:39 · PVG 07:39 · LAX 15:39 · JFK 18:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.