Project1

标题: 动态加载地图以及同时渲染两张地图能否做到? [打印本页]

作者: gg123wtf    时间: 2020-3-9 00:55
标题: 动态加载地图以及同时渲染两张地图能否做到?
本帖最后由 gg123wtf 于 2020-3-9 01:03 编辑

类似口袋妖怪的世界地图,比如一个城市一张地图,城市之间的每条道路各自一张地图,但是角色移动的时候感观上就是一张大地图,这种效果在mv里能否实现?

刚开始接触rpg maker,还不是很熟,至少入门教程和官方文档里没看到相关功能
网上找了一遍只找到拼接大地图的插件,N张小地图直接拼成一张大地图,运行的时候当做一张地图加载并渲染,但是这样肯定很慢,且占内存
另外还有一种做法是弄一个过渡地图,从A图进入过渡图再进入B图,这种做法很麻烦,工程量会加大很多,而且过渡图里的数据事件啥的还需要转移给相连的两张地图,感觉会有很多坑

所以mv或用其插件能否做到:
1. 任意时间点预加载任意地图
2. 同时渲染两张地图

如果已有插件能做到,能否给个插件名?
如果没有现成插件,那么插件能做到吗?我觉得mv内核是浏览器的话,那么起码js应该可以直接用官方内核的方法动态加载地图吧?两张地图同时跑会不会冲突啥的我就不知道了

求各位大佬支招

话说xp已经出过好几款口袋妖怪同人作了,不知道他们世界地图怎么做的,同样的方法mv肯定能用吧
作者: enghao_lim    时间: 2020-3-9 01:15
只需要多画一些衔接的部分吧,场景移动的时候不要淡出淡入就可以做到类似效果,以前在XP就已经实现过,推测MV也行。要是没有就当我没说过……
作者: zths    时间: 2020-3-9 01:29
我觉得不能同时加载吧。。
要改的地方太多。
还是像楼上那样说的多描绘一块重复区域吧。。
mv从基本设计就没想同时加载两张地图。
连地图数据都是用时加载的。。
作者: gg123wtf    时间: 2020-3-9 09:11
本帖最后由 gg123wtf 于 2020-3-9 09:26 编辑
enghao_lim 发表于 2020-3-9 01:15
只需要多画一些衔接的部分吧,场景移动的时候不要淡出淡入就可以做到类似效果,以前在XP就已经实现过,推测 ...


就是衔接部分很多很麻烦,其次处理衔接处的公共事件啥的目测会遇到很多坑,而且每次改衔接处的东西时要改三张图,虽然有复制黏贴,但我还是不太想用这种方法
作者: gg123wtf    时间: 2020-3-9 09:17
本帖最后由 gg123wtf 于 2020-3-9 09:22 编辑
zths 发表于 2020-3-9 01:29
我觉得不能同时加载吧。。
要改的地方太多。
还是像楼上那样说的多描绘一块重复区域吧。。


然而既然mv核心是浏览器canvas,那么理论上内部的东西包括底层都能改吧?
我去看了下官方文档,搭建服务器那块不涉及mv相关的东西,也就是说普通浏览器能直接跑,那么渲染部分应该是纯js实现的

另外基于那个一张大地图的插件,是否可以这样做,动态加载第二张地图后,拼接成一张大地图,然后换地图,保持人物和相机位置不变,因为mv的相机在地图边界的地方不会跟随人物,所以相机要换成永久跟随,但这不重要,主要问题是能否实现以及实现了会不会卡
作者: fux2    时间: 2020-3-9 09:29
地图本身就是动态加载的,如果是需要预加载我估计没有插件可以满足你的要求
毕竟无法得知你什么时候会离开地图,你只能人工在游戏进程(比如事件)中预加载下张需要的地图

继承一下Spriteset_Map改成读取临时的gamemap数据就能同时渲染了
这都只能算小改动,写插件都谈不上
作者: gg123wtf    时间: 2020-3-9 10:04
fux2 发表于 2020-3-9 09:29
地图本身就是动态加载的,如果是需要预加载我估计没有插件可以满足你的要求
毕竟无法得知你什么时候会离开 ...

好的,谢谢,我去研究一下
作者: tseyik    时间: 2020-3-9 10:46
[搬运汉化] 多画面插件
https://rpg.blue/thread-398550-1-1.html



作者: gg123wtf    时间: 2020-3-13 00:09
tseyik 发表于 2020-3-9 10:46
[搬运汉化] 多画面插件
https://rpg.blue/thread-398550-1-1.html

这个插件好像只支持一张地图多相机位?就算支持多张地图,要从地图1走到地图2的时候,需要地图2慢慢从边界一点点往屏幕中间显示,同时地图1往另一边移动退出屏幕,假设相机1对着地图1,相机2对着地图2,那也需要随着人物移动动态改变相机大小和位置,似乎不如直接处理两张地图
作者: gg123wtf    时间: 2020-3-13 00:30
本帖最后由 gg123wtf 于 2020-3-13 09:48 编辑
fux2 发表于 2020-3-9 09:29
地图本身就是动态加载的,如果是需要预加载我估计没有插件可以满足你的要求
毕竟无法得知你什么时候会离开 ...


Spriteset_Map好像只有tile的部分,我的设想是同时加载两个Game_Map,不止tile,还有事件,看了一部分官方源码,暂且还没完全理清整个加载地图的流程,还得接着啃

目前的想法是新建一个$gameMap2,跟$gameMap一起处理,应该只要把$gameMap2作为同节点加到$gameMap后面就行了吧?然后再重载一些$gameMap相关的函数,使其能够一并处理$gameMap2

主角所在的地图为$gameMap,也就是主地图,$gameMap2属于额外地图,当主角进入$gameMap2时,$gameMap2和$gameMap互换

其它地图插件就在$gameMap处理,切换地图时插件就跟mv正常切地图一样,这样应该简单点,插件跨地图感觉还有很多坑

现在主要有几个不太清楚的点
Game_Map的_displayX和_displayY设置了比如(5,5)后,对应的是屏幕的(0,0)吗?
人物要实现跨地图正常移动的话是不是还得重载人物的sprite或者object类?也就是本来应该是从地图1通过事件瞬移到地图2,现在需要“走”过去
另外对于$gameMap2的具体实现现在也没有一个很完整的思路,头疼……

----------------------------------------------------------------

前面回复的时候半夜了,发完就去睡了。。
刚才测试了一下,_displayX和_displayY对应的就是屏幕的(0,0)
作者: 梦想家大魔王    时间: 2020-3-13 08:56
在地图上接近边缘的区域设置接触触发的隐形事件,预加载相邻的地图到缓冲区(变量),玩家继续移动到边缘时就切换到缓冲区的地图,并且把上一个地图的数据暂存。如果玩家马上回头就切换回去,否则继续上述流程。
作者: gg123wtf    时间: 2020-3-13 09:07
梦想家大魔王 发表于 2020-3-13 08:56
在地图上接近边缘的区域设置接触触发的隐形事件,预加载相邻的地图到缓冲区(变量),玩家继续移动到边缘时 ...

你这个方案似乎没有处理同时显示两张地图的问题?

口袋妖怪那种,主角始终处于屏幕正中,或者说相机一直跟随主角,所以还没走到边界,第二张地图就要显示出来了,并且跟第一张地图拼接在一起
作者: 梦想家大魔王    时间: 2020-3-13 09:37
gg123wtf 发表于 2020-3-13 09:07
你这个方案似乎没有处理同时显示两张地图的问题?

口袋妖怪那种,主角始终处于屏幕正中,或者说相机一直 ...

相邻地图适当地画一些重复的部分,把触发切换地图的事件位置调整好。追求精细的话,地图边缘每个事件触发后传送的坐标都有细微的区别。
作者: gg123wtf    时间: 2020-3-13 09:45
梦想家大魔王 发表于 2020-3-13 09:37
相邻地图适当地画一些重复的部分,把触发切换地图的事件位置调整好。追求精细的话,地图边缘每个事件触发 ...

画重复部分这个方案一开始就被我否决掉了,几百张小地图每张都要处理相邻部分这个工程量增加太多了,所以我倾向于从底层想办法,直接改变mv的单地图渲染模式
作者: 梦想家大魔王    时间: 2020-3-14 07:56
gg123wtf 发表于 2020-3-13 09:45
画重复部分这个方案一开始就被我否决掉了,几百张小地图每张都要处理相邻部分这个工程量增加太多了,所以 ...

简单的复制粘贴而已,如果一开始就规划好,工作量不会增加多少。当然如果是从头再改一遍那就很累了。怎么选择都可,你高兴就好。




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