`
suiyuan0808
  • 浏览: 152253 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

游戏中用户点击不可达地点引起寻路循环,游戏停顿问题解决

阅读更多

游戏中用户点击不可达地点引起寻路循环,游戏停顿问题解决

 

     

 
     通常我们在游戏中通过寻路算法来找到用户点击的地点,再根据目标地点来进行寻路。当用户点击一个不可到达的地点时候,游戏会出现突然停顿现象。如上图中的X点和涂红的点都是不可达到的,游戏主角在A点(0,0)(我们暂时称为NodeA),他需要达到的地点是红色点NodeD(4,4).在这种情况下,地图越

大或逻辑格子越多,停顿也明显时间就越长,这是因为逻辑格子越多,寻路算法需要寻路的时间越长,甚至要遍历整个地图最终才发现地图是无路可走。

     所以我需要在寻路之前进行一些优化。当用户点击NodeD时候,判断一下NodeD是否可到达。伪代码

如下:

 



 

 

     if(NodeD可达)

     {

      移动角色

      }

      else

     {

 

        计算角色当前点到目标点得方向Direction.我们这里以竖直方向为90度。如果Direction<=135度

则沿着Noded四周顺时针旋转开始查询第一个可达点,否则逆时针旋转查找。

     第一个开始点是在NodeA和NodeD直线之间偏离最小的点开始找,此处为Node(3,3).因为Node(3,3)不

可达,继续(3,4),(3,5),(4,5),(5,5)(5,3),(4,3)

     

 

      }

   因为旋转一周发现也是没有可达点,我们将Node(3,3)为目标点,继续按照以上的循法顺时查找(注意排除已经查找过的点)。最终发现(3,2),(2,3)点是离原始目标点NodeD(4,4)是最近的。此时我只需要达到这两点即可,至于要达到(3,2),(2,3)中哪一点,您可以根据自己的最短路算法来选择一个。到此,我的可达目标点已经,就开始A*寻路吧。这样解决就不会整个地图遍历查询停顿现象了。

  • 大小: 17.5 KB
  • 大小: 20.4 KB
0
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics