Articles of 图

更精确的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 { […]

检查我是否遵循正确的path

您好我开发一个Android的导航应用程序跟踪path到目的地节点给定一个图使用Dijkstraalgorithm。 现在我的问题是:如何检查我是否跨越path中的判定节点? 现在我使用距离测量,例如,如果Im 0.5米附近的节点比我已经到达该节点,我把它从path中删除,但我不喜欢这种方法,因为这不工作总是因为我可以跨越一个节点,靠近它。 那么,如何解决这个问题呢? (一切都在二维;我有用户的方向) 任何建议表示赞赏

path跟踪时path平滑

我无法find一个很好的方法来做path平滑,而我沿着一条path。 我已经试过这段代码,但显然它不工作怀疑。 它应该如何工作的想法是: 边缘1(path的第一个位置) 边缘2(path的第二个位置) 而边2不是path中的最后一条边,则遍历边进行检查,以查看代理是否可以在不受到从边1的源节点到边2的目的节点的阻碍的情况下移动。 如果代理可以在这些位置之间移动,那么两条边就被一条边代替。 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); edge1 = edge2.Next; if (edge1.Next == null) { […]

如何在graphics布局上应用数值积分

我已经完成了一些基本的1D集成,但是我无法将自己的头部包裹起来,并将其应用于我的graphics布局。 所以,请考虑下面的图片: 如果我把红色的节点拖到右边,我强迫自己的位置到我的鼠标位置 其他节点会“跟随”他,但是怎么样? 对于Verlet,要计算newPosition,我需要每个节点和currentPosition的加速度。 那是我不明白的。 如何计算加速度和currentPosition? 当前位置将是RedNode的位置? 如果是的话,这不就意味着它们会重叠吗? http://img.ufgame.com/physics/NCKmO.gif

如何确定步行区域,并在3D地图上处理移动?

我已经创建了室内和室外三维场景。 室外部分也有桥梁和洞穴。 如何处理玩家的动作呢? 我的直觉是:为了确定步行区域,我可以创建一个大网格。 如果线段下方的法线不太陡,那么它就是可行的。 如果两个相邻区段的高度之差不大,则玩家可以在它们之间移动。 我的解决scheme远非最佳。 这将消耗大量的内存,并且在同一个XZ位置有多个可行走区域(例如,在山谷上的一座桥)时,它无法处理情况, 如何有效地管理运动? 它是如何解决在游戏引擎,如虚幻或统一?

泡沫射手克隆,存储/添加气泡的结构

我有几个问题试图找出什么最好的数据结构来存储气泡的网格,以及如何连接新的气泡,当一个移动的球碰撞网格上的球。 我的第一个实现是创建一个二维数组,并填充一堆气泡。 然后我遍历整个数组,只有在当前气泡的所有方向上都有相邻的气泡时,才能在气泡之间建立连接。 在我建立了网格并建立了所有连接之后,我添加了每个气泡列表,以便在检测到碰撞时查找气泡之间的连接。 当一个移动的球与一个静止的球碰撞时,我在球之间创建了一个连接,然后从碰撞的球上执行recursionBFSsearch,find与我刚碰撞的球颜色相同的所有球。 这个工作,但不是非常防弹,因为当某些球被删除时,我经常断开球之间的连接,或者经常会有球组不会消失。 我的第二个实现是使用Hex网格。 我曾经在这里读过类似的问题,在这里用户建议使用六角形网格,所以我想我会尝试这种方法。 再次,我创建了一个包含一堆泡泡的二维数组,并尝试运行一个映射器,它根据它们在网格中的位置将某些球映射到彼此。 我还有一系列的连接问题,经常会导致连接断开或没有正确连接。 这里有很多边缘案例,我仍然坚持在即时通讯不完全确定如何解决。 例如,当我碰撞的球与另一个球相连时,如果这个球与另一个球同时碰撞,该如何处理。 或者我应该如何在特定区域内寻找球。 我觉得我只是推翻了这一点,并使问题的方式更复杂,然后它需要。

程序化生成的交叉path

问题 我一直在尝试创建一些程序生成的path,但是在生成path的交叉点时,我遇到了一些问题。 path当前是沿着一个catmull-rom样条“挤压”的,之前我使用了贝塞尔曲线,但是catmull使得整个过程更容易。 我的计划是将所有path节点都作为一个大图的一部分,以便每个节点都有其他节点的边。 这样,稍后在path上进行path查找将会更容易。 public class PathNode { public Vector3 Position; public float Width; public List<PathNode> Edges; } 这里有一个例子,有点显示我想要的,想想现有的游戏,如城市天际线的道路: TL; DR我知道如何沿曲线生成网格,我最大的问题在于我不知道如何在交点处生成网格。 我已经阅读了关于从交叉点的所有最接近的顶点创建多边形以及对该多边形进行三角剖分的内容。 但我没有看到我将如何从网格中得到正确的顶点,而不必计算它们中的每一个到相交节点的距离。 如果你需要更多的信息,请不要问:) 先谢谢你 问候霍尔斯特。

创建A *path查找的节点和边的连接循环网格的最佳过程是什么?

就像标题所说的那样,我试图创建一个节点的网格,这些节点之间保持边缘或连接,所以我可以执行A *algorithm来让对象遍历它们,就像在标准RTS中看到的那样。 我想知道是否有这个节点网格数据结构的一般结构和algorithm,因为我无法在网上find一个好的资源。 例如,我将通过位置(Vector3)移动我的对象,所以我将不得不计算我的边缘权重是两个节点之间的大小。 这是一个标准的做法? 任何人也许可以指导我如何在一个标准的RTS实现这个粗糙的基础? 我将不胜感激任何信息!

奇怪的3D游戏引擎相机与X,Y,缩放,而不是X,Y,Z

我正在使用3D游戏引擎,它使用4×4matrix来修改相机投影,格式如下: rrrx rrry rrrz – – – zoom 奇怪的是,相机不响应Z翻译参数,所以你不得不使用X,Y,Zoom来移动相机。 从技术上来说,这对于帝国时代III等等式的游戏来说是合理的。 但是,这是一个3D引擎,为什么他们devise相机忽略Z和只响应缩放? 我在这里错过了什么? 我已经尝试了设置相机的每一种方法,它似乎真的忽略了Z. 所以目前我必须求助于移动场景图中的主要对象,而不是移动相机与对象的关系。 我的问题:你有什么想法,为什么引擎会使用这样的计划? 这是常见的吗? 为什么? 或者看起来我错过了一些东西,而SetProjection(Matrix)函数被破坏了,忽略了matrix中的Z平移? (不太可能,但可能)总之,有什么解决方法? 移动物体是唯一的方法吗? 编辑:对不起,我不能透露很多关于引擎,因为我们在一个有约束力的合同。 这是一个本地开发的引擎(澳大利亚),用C#编写,用于数据可视化。 编辑:引擎的默认模式是拼写,虽然我已经切换到透视模式。 它可能更有效的使用X,Y,缩放正交模式,但我需要使用透视模式来渲染日常物品。

如何在HTML5中将对象移动到绘制的贴图上而不进行缓冲?

我一直在搞HTML5已经有一段时间了,但是这是我想我还没有弄清楚如何处理好的东西。 我确信有一个非常简单的解决scheme,我只是没有打开我的眼睛,但无论如何。 问题是这样的:我有一个HTML5canvas,我使用一个函数(在页面加载时调用一次)来加载图像切片,该函数设置一个名为imageObj的图像对象,并在imageObj.onload绘制我想要的图像它在特定的坐标上绘制。 现在,我通常总是在一个以30帧每秒运行的setTimeout中运行我的主要canvas游戏代码。 我有一个单独的函数,它检查哪些按键被按下并将它们存储在数组中(以考虑多个按键),并且如果按下方向键,则存储玩家的x和y位置的全局variables相应地被递增/递减。 现在,在setTimeout循环中,我在这里绘制一个带有x和y坐标的小矩形作为玩家x和yvariables的矩形。 但是,这是我遇到问题的地方。 我不刷新我的canvas,我没有清除屏幕或在每帧的开始部分放置一个覆盖屏幕的新的黑色背景,因为那样我将不得不重新加载地图,而且在我的本地主机上速度非常慢,会更加如此在线。 此外,由于我没有清除屏幕,玩家的矩形在它后面留下了一个长方形的痕迹(即,其位置的所有先前的实例都有一个矩形) 我该如何处理? 如何管理瓦片贴图上的dynamic对象,并刷新canvas,而不必不断地重新加载瓦片贴图? (或者用一些聪明的方式重新加载瓦片地图,我相信有一些方法,比如预先画好下一帧,或者我不太确定) 编辑:我宁愿不使用任何第三方apis或图书馆或游戏引擎,纯粹主义的一点点。 另外,刚才我想到,如果我有两个油画背靠背? 一个与瓷砖地图和其他包含对象?