在hack&slash游戏中寻找一种很好的角色移动技巧


51

我正在制作hack&slash游戏,并且希望角色像在Torchlight,Diablo等中一样移动。目前,我为地板的所有可行走区域生成了一组节点。当我单击某个位置时,播放器会通过节点的插值路径到达那里。这看起来不是很自然。玩家像机器人一样移动。敌人也使用该节点系统进行运动并共享相同的问题,但是我对它们还有另一个问题。当敌人发现玩家时,他们会以最短的路径找到他。有时他们会使用相同的路径并与玩家对齐,而不是包围玩家。我不知道如何让敌人选择不同的路径并包围玩家。你知道我该如何解决这个问题?也许我应该对角色移动使用不同的方法?


我目前的技术:

在此处输入图片说明


火炬之光截图:在此处输入图片说明

-更新-

我想知道如何处理这些情况:

情况1,我途中有动态/静态障碍

在此处输入图片说明

情况2,敌人有通往玩家的圣路(进入队列与我们作战) 在此处输入图片说明


10
+1表示图表和屏幕截图(也是一个好问题)。总是有用的。
共产党鸭子

这是一个令人敬畏的问题(+1),我希望对此有很多讨论和建议,涉及应对挑战的不同方法(改变路线,AI等的随机影响)。
兰道夫·理查森

1
我发现创建AI时最好使用评分系统。根据每个敌人的得分(例如到达玩家的时间),您可以为他们指定特定的行为。例如,如果最多有8个小怪可以攻击玩家,那么得分高于前8个的小怪可以有意识地尝试找到通往玩家的更长路径,从而使它们看起来更聪明。
乔纳森·康奈尔

我仍在寻找答案,如何处理导航网格物体上的障碍物(动态/静态)?,我无法使用重铸
piotrek,2011年

Answers:


24

结合导航数据结构的转向行为

有很多方法可以做到这一点,但这是基本概念。使用导航网格可能会更容易,以便您可以在每个凸形部分中应用寻路。

如果您坚持要保留图形,则可以对路径中的每个节点使用“ 查找”行为,而不必严格遵循从一个节点到另一个节点的路径。

您可以采用的另一种方法是“ 路径平滑”,但是请记住,这在计算上相当昂贵。

希望能有所帮助。

编辑:

为了帮助您避免避障问题,请使用某种避障方法


谢谢,您知道如何生成导航网格物体吗?还是有其他方法可以做到?我的地图是用无缝地板(四角形/三角形)创建的。
piotrek 2011年

1
您始终可以使用Recast(code.google.com/p/recastnavigation)生成导航网格物体。您只需要给它一个“三角汤”(一堆多边形),它就会为您生成。
Ray Dey

我是唯一遇到此问题的人,但链接:ai-blog.net/archives/000152.html已死。实际上我无法访问www.ai-blog.net
123iamking '17

3

如果您宁愿坚持使用节点图,而不是像其他人建议的那样切换到导航网格,则可以通过分配每个敌人从特定方向进行攻击来解决“与玩家对齐而不是包围玩家”的问题。

有许多方法可以完成此操作,但是我通常使用“令牌”系统为怪物分配唯一的方向,其中玩家对象为每个方向(北,东北,东等)拥有一个令牌。当敌人想要通向玩家时,它必须首先从他那里获得令牌。令牌指定的方向告诉怪物允许其寻路到玩家的哪一侧。由于玩家每个方向上只有一个令牌,并且怪物在攻击之前需要令牌,因此多个怪物不会全部尝试到达玩家的同一侧,这会稍微破坏他们的路径。

另外,您可能还希望在查找路径的过程中对节点施加少量惩罚,以鼓励怪物从与它们具有的标记匹配的方向接近。(也就是说,如果一个怪物拥有允许其从东方进攻的标记,那么,为了确定该怪物的“最短路径”,请将玩家北/西/南的任何路径节点都视为它们是几个节点,而不仅仅是一个)。这将使怪物更快地分离,并尝试使玩家侧翼,而不是单一文件地向玩家进军,而只会在最后一步传播。


2

基本上,对于敌人来说,您想要做的是在宏级别上进行寻路(考虑生成凸面区域并通往玩家所在的区域),并在微观级别上进行一些布依德式的转向行为(一旦您靠近给玩家)。

这是一个boid行为的示例:http : //www.red3d.com/cwr/boids/

对于播放器,我认为手电筒会在您单击/拖动的导航网格上进行寻路,并且效果很好。与直接控制相比,它可能会感觉有些脱节,但这确实可以为播放器带来更好的结果。


但是,例如楼梯呢?敌人也可以在那里攻击我,使其成为另一个导航网格?
piotrek,2011年

它应该是导航网格的一部分,是它自己的凸形。
四分

1
或者,您可以继续使用点对点路径,并在“接近”时返回基于物理的转向行为。
四分

如何处理导航网格物体上的动态障碍物?
piotrek 2011年

1
这是有关重铸如何处理它的博客文章:digestingduck.blogspot.com/2011/03/…
四分体

1

有一种名为rrt的算法,用于现实世界中的寻路问题。您的英雄(或敌人)可以在其上行走的表面是输入以及对象可以移动的表面,并使用一些优化算法来找到到达目标的路径。据我所知,这种算法在机器人杯联赛中得到了极大的应用。快速,找到最短路径并避免碰撞和急转弯。您可以使用此幻灯片演示来了解它如何生成路径。


经过更多的查看之后,我提供的演示似乎只是在讲述rrt的功能,并建议一种新的方法,该方法声称在某些情况下效果更好,他建议RTS游戏寻路算法希望对您有所帮助。
Ali1S232 2011年

0

为了使寻路路线看起来更“现实”,建议您阅读《 Game Programming Gems Vol.1》中有关自然外观A *的文章。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.