Project1

标题: 同时渲染两张地图卡顿如何解决或优化? [打印本页]

作者: gg123wtf    时间: 2020-3-14 16:27
标题: 同时渲染两张地图卡顿如何解决或优化?
本帖最后由 gg123wtf 于 2020-3-17 23:25 编辑

首先声明一下,做以下这个插件是为了实现口袋妖怪那样的地图移动,我搜了很多插件和帖子,国内的国外的,没有找到任何一个方案能完美实现,所以只好自己写了。。

原因已找到:看5楼
问题解决:看6楼
[line]1[/line]
目前在制作一个可以同时显示两张地图的插件,思路是第二张地图仿照Spriteset_Map的做法创建一个新的tilemap,添加到_baseSprite里,人物移动时地图按需动态加载,不过当两张地图同时渲染时能够感觉到明显的卡顿

地图1

地图2

同时渲染:


上面动态图一开始向左移动是流畅的,但是第二张地图一出来就卡了

按理说两张地图都是默认大小17x13,远小于一张256x256的地图,所以说不是大小问题,我目前猜测是两个_tilemap对象在底层update循环里处理效率底下之类的,但是还没想到怎么调试,要看效率肯定不能打断点,如果去update循环里打印,那打印的东西会有一大堆……

所以有没有大佬知道怎么解决的?或者可以帮忙一起调试一下吗?

现阶段的脚本,即插即用:
C47_SeamlessMap.rar (5.03 KB, 下载次数: 65)

用法:插件说明里有
简单点就是创建两张默认地图,随便画
地图1备注里写<cmap:u 2 7 0>
地图2备注里写<cmap:d 1 6 12>
作者: wabcmcc    时间: 2020-3-14 21:18
樓主如此熱誠,固執,實在忍不住多言,
單張大地圖劃分兩(多)張不同風格地圖,玩家看不出來.
如要連環地圖.請君移步將多個地圖連接到一個大地圖的插件
作者: gg123wtf    时间: 2020-3-14 21:47
wabcmcc 发表于 2020-3-14 21:18
樓主如此熱誠,固執,實在忍不住多言,
單張大地圖劃分兩(多)張不同風格地圖,玩家看不出來.
如要連環地圖.請君 ...

你提的这两点都不行啊,之前几天搜索我都搜到了,但是没法应用,不然我也不会自己写插件了。。

单张大地图划分的那种,首先地图得非常非常大,我要做口袋妖怪那种的,MV的256x256根本不够,再者那么大的地图加载肯定巨慢,另外单张地图的话地图块目测不够用,毕竟任何一个ABCDE类型的图块集MV都限制了素材宽高,能放的不同图块类型有限

合并的那种,最基本的,就要求两张地图使用同一套图块集,肯定不行
作者: gg123wtf    时间: 2020-3-15 23:24
我已经确定是同时渲染两套地图时tilemap算法效率低下造成的卡顿,然而具体原因还不知道,跟地图尺寸没关系,一张17x13x2大小的地图算法只执行一遍,不会卡,两张17x13的地图,虽然跟前面一张图大小相等,但是算法执行两遍,就会卡。。

一张地图的话算法耗时大约70+ms,所以两张图就直接翻倍变成140+ms,甚至更多,因此就能感觉到卡顿了,另外FPS直接掉到6并且升不回去了

尝试过创建新的tilemap、新的sprite、新的spriteset_map,都不行,同一帧计算两张地图就是会卡,于是试了下隔帧渲染,也就是一帧渲染主地图,下一帧只渲染衔接地图,再下一帧只渲染主地图,能解决卡顿问题,但是屏幕会闪

所以最后想来想去还是只能从算法本身入手,要么看懂完整的算法流程,然后再想办法,要么把两个tilemap合并成一个,然后在算法里动手脚,让算法能够识别成两张地图,先尝试后者吧,前者太烧脑了……
作者: gg123wtf    时间: 2020-3-17 16:17
我知道为啥会卡了。。两张地图两套tilemap,mv在渲染时需要切换图块集(tileset),先用图块集1渲染地图1,切换成图块集2,再渲染地图2,假设地图就是按12的顺序渲染,那么上一帧渲染后,当前图块集是2,下一帧要渲染需要先切回图块集1,渲染地图1,然后再切图块集2。。

所以嘛,图块集这个东西就很大了,不停切换一直在消耗算力,只有一张地图的话只会在进入地图的时候加载一次图块集,所以无论地图多大,渲染耗时基本不变

原因找到了,要实现双地图就得改底层mv的渲染方式了,或者说要改加载图块集的方式……
我得想想有没有别的方法。。
作者: gg123wtf    时间: 2020-3-17 23:23
本帖最后由 gg123wtf 于 2020-3-18 09:30 编辑

已解决,由Lanza Schneider大神给了一个巧妙的方案解决了核心问题
不过插件还不能用,还有很多要完善的地方,比如人物还不能地图间穿行,另外加载第二张地图时会卡的黑屏一下,但这些都不算底层问题了,等我后续完善之后再放上来吧

作者: guidayu    时间: 2020-3-17 23:47
好厉害!大佬加油!




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1