人物移动时怎么自动根据地形拐弯?

RT:人物移动时怎么自动根据地形拐弯?
creator版本:creator3.4.0
限制条件:
1、人物在update里面自己移动,玩家不能控制,
2、地板根据配置表生成,有一个索引,但是索引的顺序不代表地板生成的顺序,
3、地板不一定有多少,可能几十、几百,也可能上千

本来想到的是在人物移动的update里面循环判断所在地板的数据,然后查找前左右三个方向地板的信息,但是想到地板可能会有几百上千块,那每一帧都得遍历几百上千块地板,那游戏可能会卡成狗。

想问下有没有其他方法来解决这个自动拐弯的功能?

顺便提个bug吧,人物的影子会从圆柱体的中间穿过去,圆柱体是一个整体。

QQ截图20220120164518

1赞

你不是说了吗,只判断前左右三个方向地板的信息,为啥会几十几百几千呢,就算1亿块也是只判断三个啊

要循环遍历才能找到那三个啊

这个地图理论上是个矩形,所以可以用一个二位数据组来记录位置吧。
你只要记录用户当前的行列pos(x,y),就可以推算出前后左右的地板了,根据下标来访问对应的底板信息即可。

1赞

根据玩家的位置查找当前所在的地板的信息,这里要一个循环了,
找到所在地板的信息后,再根据这个地板的信息找到前左右是三个地板的信息,这又要一个循环了,
那就相当于在一帧里面跑了两个循环,如果数组里面的东西多了,那不是得卡死?

地形数据难道不是:map[x][y]这种吗?

1,分割所有地图数据不要放在同一个下边,离哪个近就循环哪个里边的数据。
2,整个比自身大点的触发器,增删获得当前范围内的数据。

你说的是类似四叉树的那种方法?

不是那种,我地板生成是根据策划那边给的配置表的,直接按照配置表生成的
QQ截图20220120174345

差不太多,第一种就是生成的时候就给好分组,然后把中心点算出来,这样只需要算离哪个点近然后取哪个点对应的数据就行了。

第二种没啥讲的

卧槽???我没看清标题。。。根据地形拐弯 存一个id不就完了。到达这个id的点后id+1 然后读表往下一个走不就完事了

不管给什么配置,如何生成,本质上就是一个tiledMap。地块可以无限多,但是用户可见的只是一部分。以主角为中心,摄像机跟随,计算可见范围。类似一个滑动窗口,窗口内的可见,窗口外的不可见,用户移动时,动态滑动窗口,复用地块即可。
地块在坐标系里都是可以根据position和地块的长和宽来计算属于哪一个方块上。然后再+1,-1就可以计算前后左右的九宫格方块了。

:rofl:ID的顺序不是生成的顺序,假设id=1是当前的位置,那么id=2的地板不一定在哪里。
如果要把id=1地板旁边的地板标记为id=2,那样比较麻烦

网格寻路?

???你管他谁先谁后干啥,,,生成的位置难道不是表里的数据?直接取表里的啊

有一个问题是要获取当前地板的位置,获取完再获取这块地板周围的地板的话,是不是得遍历一遍?因为人物是一直在移动的,那是不是要在update里面执行?
那就相当于是update里面每一帧都要循环一次,数量多的话,那会相当卡

人物在不停移动那得在update里面获取表里的数据,如果表里的数据很多那就在update里面每一帧遍历N多数据,那不是会卡成狗?
不在update里面遍历的话,要怎么知道玩家当前所在的是哪块地板?他有可能这一帧在id=1的地板上,下一帧就在id=2的地板上了

??????id=2你就区id=3的数据啊???为什么要遍历?????

任何时候都不需要遍历。
比如在坐标系里。一个1x1为一个方块格子。如果你的位置是(3.2,4.6)。说明你在第4列,第五行的格子里。
给定一个坐标(x,y),除以格子的宽和高就可以计算出行和列了。

不管什么时候,地图永远是程序生成的,不管他怎么随机,你总是能拿到地图数据的吧?这个数据按二维数组存起来很难么。。。