Articles of path寻找

防止重叠游戏工作室的实例

我有一个游戏,其中一个敌人的多个实例在步骤过程中向玩家移动。 屏幕上最多可以显示50个实例。 问题在于,这些实例在跟随玩家的时候最终都在一个大团队中。 我想阻止他们获得超过2个像素的对方。 代码如下: if distance_to_object(player) < 160 { direction = ppoint_direction(x,y, player.x, player.x, player.y) p_potential_step(x,y, player.x, true); } 如果我在这个代码中进行了2px的距离检查,那么这个实例就开始做出生涩的旋转和旋转。 我希望实例继续跟随玩家,但不要让自己重叠。

在明星中,我使用总和还是边缘成本?

当您将新节点添加到封闭列表中时,您需要检查所有相邻节点。 如果在打开的列表中find任何相邻的节点,则必须检查G是否会通过当前节点到达那里。 我的问题是,当检查G是否会降低,如果你通过当前节点,你是从最后一个节点加起来,还是从0开始? 假设你使用对角线的G = 14和水平的G = 10。 最后一个closures列表的G是20.你的当前节点比最后一个closures列表低一个块,并且在G = 34的开放列表上有一个相邻的节点。你应该检查G是否会如果你通过你的当前节点做了20 + 10 + 14 = 44,44!<34,或者你应该从0开始,所以0 + 10 + 14 = 24,24 <34? 我很确定,后者和前者一样,数字永远不会更低。 但如果是后者,那么在某一点之后,每一次都不会降低呢?

如何继续航点的path?

我使用Dijkstraalgorithmfind最短path,并在屏幕上绘制这条path。 随着角色对象的移动,path自我更新(随着对象接近目标而缩短,并随着对象的移动而变长)。我试图想象我的问题。 这是开始状态。 “A”节点是目标,path是蓝色,对象是绿色的。 我绘制这个path,从对象到最近的节点。 在这种情况下,我的问题发生。 因为“D”节点比“C”节点更接近对象,所以会发生这样的事情: 那么,我怎样才能决定对象通过'D'节点? path应该是这样的: 我想到的一件事是我使用pathpath中两个最近节点之间的一些距离variables。 (在这个例子中,这些是“C”和“D”节点)。当对象接近“C”并同时离开“D”节点时 ,这意味着字符通过了“D”。 不过,我认为有一些标准化和简单的方法来解决这个问题。 我应该采取什么方法?

如何以恒定速度跟踪CatmullRomSplines上的对象(例如火车和火车车厢)?

我有一个CatmullRomSpline,并使用https://github.com/libgdx/libgdx/wiki/Path-interface-%26-Splines上的很好的例子,我的对象在样条线上移动的速度是平滑的。 用一个简单的火车和马车的例子,我现在想要让火车跟火车一样的速度跟火车一样的速度(不像下面的代码那样颠簸)。 这导致我的主要问题: 我怎么能使马车的速度与列车的速度一致,并使之不生涩(这与我想的衍生物有关,我不明白那部分是怎么工作的)? 为什么我需要按行长来划分,以每秒转换为米,这是正确的? 这是不是在链接的例子? 我已经使用了上面链接的示例,并针对具体示例进行了修改: private void process(CatmullRomSpline catmullRomSpline) { // Render path with precision of 1000 points renderPath(catmullRomSpline, 1000); float length = catmullRomSpline.approxLength(catmullRomSpline.spanCount * 1000); // Render the "train" Vector2 trainDerivative = new Vector2(); Vector2 trainLocation = new Vector2(); catmullRomSpline.derivativeAt(trainDerivative, current); // For some reason need to divide by length to convert […]

更精确的path平滑

我正在读一本关于AI – path规划和path平滑的书。 然而,这本书正在使用c + +代码。 而我正在编写与XNA框架的C#。 我有一个平滑的工作path,但这本书说,它可以更精确(但有点慢)。 这是我到目前为止的代码: public static LinkedList<Vector2> SmoothPathEdgesQuick(LinkedList<Vector2> path, Player player) { LinkedList<Vector2> newLinkedList = new LinkedList<Vector2>(); List<Vector2> toBeDeleted = new List<Vector2>(); var edge1 = path.First; var edge2 = path.First.Next; while (edge2 != null && edge2.Next != null) { if (player.CanWalkBetween(edge1.Value, edge2.Next.Value)) { toBeDeleted.Add(edge2.Value); edge2 = edge2.Next; } else { […]

人工智能寻路algorithm

我期待创造一种特殊的寻路系统。 在这一点上,几何仍然是灵活的,但这个寻路是整个项目。 我的目标是这样的: 我会有一些实体寻找path。 每个实体都有一定的path记忆。 内存将基于地标。 地标将是地图上可以或已经被实体看到的对象或实体。 当一个实体生成一个path时,只能根据它可以看到的内容以及它的内存来进行。 还有其他的东西需要猜测,它不能使用未知的信息。 系统必须能够同时处理很多实体的更新path,但是它不必find最佳path,特别是不能一次尝试。 它不需要在一个框架中find它的目的地的path,只要能够取得进展,并最终在可能的情况下达到目标。 实体可能能够共享部分或全部path信息。 我想这是最好的一些修改后的D *algorithm,但我想知道是否有人有任何其他的建议,这样做,或我希望面临的挑战。 我所知道的一件事是,如果我使用地标来确认path,那么我将能够快速查找附近的地标。 如果我在列表中有成千上万的地标,需要遍历它们并计算与玩家的距离,这将会造成麻烦。 如果我要定义像凸包这样的区域,我可能可以在需要的时候在实体之间共享计算,因为我可能会说这个聚合内部的任何人都应该能够看到这个聚合中的所有东西。

永远保持“活着”的algorithm

我正在执行一个游戏,玩家正在玩(滑动)小红色矩形,目的是不打黑色矩形,不移出内部蓝色矩形。 黑色矩形从左到右(从右到左)和从上到下(从下到上)的轨迹移动。 他们正在移动的速度是恒定的,例如5个像素。 你可以在这个video中得到一个更好的主意。 其中一种游戏模式如下 – 游戏中将提出2条path显示为箭头,其中一条可能导致“死亡”,而另一条将始终是正确的,用户将不得不select其中之一直到他做出错误的select。 移动方向只能是上,下,左或右,而不是对角线,红色矩形的速度是恒定的,例如6个像素,黑色矩形速度是5个像素。 我为“成功”的方向奋斗了一个多星期,至今为止我所做的是: 在1.0到2.0秒之间产生一个随机的浮点数,然后将产生的数字除以0.030得到黑色矩形和红色矩形的移动次数。 计算将在下一次会议中进行的黑色矩形和红色矩形移动点,移动次数乘以黑色矩形5px和红色矩形6px的速度。 在知道了黑色矩形的速度和移动的次数之后,我可以在当前时间段的任何时候告诉他们的位置。 将红色的矩形向左移动,直到它被击中,并记住结果,例如15移动,直到命中。 在正确的方向上做同样的事情。 按照升序之前可以进行的移动来sorting方向。 将红色的矩形移动到可以进行最多移动次数的方向上。 做同样的事情,直到时间会话结束,即在第一步中生成的随机浮动号码。 这个解决scheme大部分时间都在工作,但是有时会导致无法逃脱的位置。 问题不在代码中,而在algorithm逻辑中。 例如看下面的图片: 正如你所看到的那样,红色的长方形将会被一个黑色的长方形卡住的位置。 在这种情况下,最好的解决办法是先移动到顶部1,然后移动到顶部,因为左上角的黑色矩形会移到顶部,但是我真的不知道如何解决这个任务。 什么是完成这个任务的最佳方式。 先谢谢你!

我如何在3D环境下进行加权级联?

我正尝试在3D环境中沿着path执行加权级联。 现在,我想要做的是在环境中的一个对象(一个立方体)从其坐标1在每个方向扫描另一个立方体,然后,如果它find另一个立方体,它将围绕该立方体扫描另一个立方体等到达path的末端,或者已经达到了40个立方体的极限,并且我希望它沿着它所需要的path的每一步都具有一个重量,所以如果沿着path超过了40个立方体,它将会停止。path。 现在,我不知道从第一个立方体周围扫描的位置。 我如何让它移动到下一个立方体,然后下一个立方体,然后下一个等没有写一个很长的方法,考虑path上的每个立方体? 在寻找诸如A-Star或BFS / DFS之类的寻路algorithm之前,我已经尝试过了,发现它太复杂了,对于我的程序的这一部分来说,这是不必要的复杂。 谢谢。 编辑:我忘了提及,这些立方体不动,他们留在任何地方玩家把他们。

nurbs和寻路优化

我正在做一个项目,而我目前的里程碑是寻路。 我有一个由几个组件组成的工作原型: 手动绘制一条path,该path与允许角色行走的视觉path相匹配 A *计算的网格 在A *评估期间通过栅格单元格邻居的射线,如果它与完美的绿色像素相交,则将单元格设置为A *计算的漫游,并且如果它碰到透明像素,则将单元格留为不行走 在计算出粗糙的A *path之后,nurbs的一个algorithm使得path中的交点变得更加容易,可以这么说 我目前的问题是nurbs的path看起来好像可以使用一些优化,而且我可以用你的帮助把我推向正确的方向,或者指向我的一些文献或者直接集体讨论..请看下面的图片,它应该是更清楚我的意思,我的目标是让nurbs更直线,也许使用某种基于A *结果的外推algorithm,并简化它,使得nurbs曲线从开始到结束 该项目是基于浏览器的Away3D框架(sea3D框架更具体) 它的github存储库可以在这里find 谢谢! 下面是一个显示上面描述的组件的例子:在GREEN中手动绘制的path,在RED中的A *步行path,在蓝色阴影中,nurbs 还有一个例子,它是如何在游戏中看起来没有所有的寻路视觉performance

集成镜面,漫reflection和折射

我正在实施一个MLT双向path追踪器。 我有一个集成漫reflection,镜面reflection和折射的问题。 1)第一个问题是漫reflection和镜面reflection。 漫reflection是通过在半球取样射线来完成的。 但是镜面reflection是通过find与法线成一个角度的光线来完成的,与正常的入射光线相等。 但是,一个物体可以同时具有漫reflection和镜面reflection。 何时使用镜面reflection或漫reflection作为射线? 2)与第一个问题相同,但这次是将reflection与折射相结合。 我在网上看到了一些研究论文和网站,其中有镜面,漫reflection和折射,但他们没有关于如何做到这一点的教程。