Questions tagged «grid»

对表面进行规则的镶嵌,以创建以一致图案排列的均匀,连续的单元。

7
我可以防止对角线运动探索更多地图吗?
在沿着8个方向中的任意一个方向进行完全相同的旋转(棋盘样式规则)的磁贴网格中,是否可以防止对角移动显示比正交移动更多的新磁贴? 例如:您是下图中的红色框。目前,您可以看到绿色的单元格(方形视野)。您可以在八个方向中的任何一个方向上移动一个图块的距离。 如果您向东北移动,您将探索13个新的图块(以蓝色显示)。如果您改为向南移动,则将仅探索7个新图块(以紫色显示)。 如何使每个方向的旅行对探索都同样有利?

4
为什么不使用八角形图而不是六边形图?
我了解六角形瓷砖比方形瓷砖的优势。但是为什么不使用八边形呢?我认为它们可以在八个方向上提供更好,更自然的运动。 我当时正在考虑在某些游戏中使用这种地图,但是我还没有看过任何游戏在使用它,所以我想知道我是否错过了使用它时明显存在缺陷的东西?

5
在基于网格的液体模拟中模拟压力
我在XNA游戏中有一个基于2D网格的水系统,我们有一种使用元胞自动机模拟水的滴落和扩散的方法。 沿斜坡流下的水的示例: 每个图块可以包含0到255个质量的液体值,以字节为单位存储。我没有使用floats旧的供水系统,但是它增加了复杂性并影响了性能。 每个水铺瓦都会使用一组简单的规则进行更新: 如果下面的图块中有空间,请尽可能多地从当前图块移至最下面的图块(向下流动) 如果2个边不相同且都不为零并且都可以通过,我们将获得3个图块的总和(左+当前+右),并将其除以3,剩下的就放在中间(当前)图块上 如果上述规则给出的总和为2,则我们应将图块分为两侧(1、0、1) 如果规则2的总和为1,则选择一个随机面流入 如果规则2失败,我们应该检查一侧是否可以通过,另一侧是否可以通过。如果是这样,我们将当前图块一分为二 如何扩展这种逻辑以包含压力?压力会使液体从“ U形弯头”上方上升并充满气穴。 当前如何失败的示例: 水应在U型弯管的两侧流动并平衡。此外,我还创建了一些方法来找出水障碍到底有多远,以及因此而受到的压力。现在,我需要能够获取这些数字并将其应用于其他区域以均衡压力。
30 xna  c#  physics  grid  water 

2
获取六角形网格中的瓷砖环
感谢这篇文章:六角砖并找到它们的相邻邻居,我能够将相邻砖收集到给定的砖中。但是我几乎迷上了一种算法,该算法只给我一个由偏移量指定的图块“环”。Stack Overflow帖子中给出的算法并不完全在乎它收集图块的顺序。 我知道每个偏移量都会添加6个图块。 偏移1为您提供6个图块(第一个相邻图块)。 偏移2给您12。 偏移3给您18,依此类推。 每个偏移量持续增长6。因此,我认为应该有一个适应这些偏移的规则。我不能完全弄清楚这一点。任何人?


3
如何渲染无限的宇宙?
我很好奇游戏开发行业中渲染3d Universe的最佳做法是什么? 更加具体: 数据点是给定的,并且是静态的。每个点都有位置,颜色和大小。 整个数据集比可用内存大得多。 用户应该能够“放大”以立即看到更大的图片; 最幼稚的方法是将宇宙拆分为多维数据集并仅渲染可见的内容。我不确定在这种情况下应如何实现“缩小”。是否应该为每个可能的缩放级别预先计算多维数据集?也许有更好的方法? 我正在寻找技术不可知的解决方案。

2
领土巡逻计划
我正在开发一个游戏/模拟,代理商在其中争夺土地。我的状况如下图所示: 这些生物走来走去,占据一块土地,如果他们有空的话,他们会踩到它们。为了使这一点变得更有趣,我想介绍“巡逻”行为,以便探员实际上是在他们的土地上走来走去,从任何可能想要入侵的入侵者那里巡逻。 在技​​术方面,每个正方形均表示为x,y位置以及表示其边长的尺寸。它还包含有关谁占据广场的信息。所有正方形均存储在中ArrayList。 如何介绍巡逻行为?我想要的是让每个特工巡逻该区域的某个部分(他们在他们将巡逻的区域之间划分)。我发现的主要问题如下: 如图所示,土地面积非常随机。很难理解各个方向的界限。 特工应如何分割地区巡逻? 土地区域可能是不相交的,因为对方的队伍可能会从中间占据领土。 我的想法是在每个方向上取最远的正方形,将其视为该区域的边界,并根据这些边界划分区域,但这可能包括许多无关的土地。 我应该如何解决这个问题?
14 java  ai  grid 

5
如何优化顺序重要且碰撞是基于对象组的条件的碰撞引擎?
如果这是您第一次遇到此问题,建议您先阅读下面的更新前部分,然后阅读本部分。 不过,这是问题的综合内容: 基本上,我有一个带有网格空间分区系统的碰撞检测和解决引擎,碰撞顺序和碰撞组很重要。一次必须移动一个身体,然后检测碰撞,然后解决碰撞。如果我一次移动所有物体,然后生成可能的碰撞对,则显然速度更快,但是由于不遵守碰撞顺序,因此分辨率会下降。如果我一次移动一个身体,我将不得不让身体检查碰撞,这将成为一个^ 2问题。将组混合在一起,您可以想象为什么在很多身体上它变得非常慢。 更新:我已经为此付出了很多努力,但是无法优化任何东西。 我成功实现了Will所描述的“绘画”,并将组更改为位集,但这是非常非常小的加速。 我还发现了一个大问题:我的引擎取决于冲突顺序。 我尝试了一种独特的碰撞对生成的实现,该实现肯定可以大大加快一切,但是却破坏了碰撞的顺序。 让我解释: 在我的原始设计中(不生成对),发生这种情况: 一个身体移动 移动后,它会刷新其单元格并使其碰撞到的身体 如果它与需要解决的物体重叠,则解决碰撞 这意味着,如果一个物体移动并撞到墙壁(或任何其他物体),则只有已移动的物体才能解决其碰撞,而另一个物体将不受影响。 这是我想要的行为。 我了解到物理引擎并不常见,但对于复古风格的游戏却有很多优势。 在通常的网格设计(生成唯一对)中,会发生以下情况: 所有身体移动 在所有身体移动之后,刷新所有单元格 生成唯一的碰撞对 对于每对,处理碰撞检测和解决 在这种情况下,同时移动可能会使两个物体重叠,并且它们将同时分解-这有效地使物体“相互推挤”,并破坏了与多个物体的碰撞稳定性 这种行为对于物理引擎是很常见的,但在我的情况下是不可接受的。 我还发现了另一个主要问题(即使在现实情况中不太可能发生): 考虑A,B和W组的身体 A与W和A相撞并解决 B与W和B相撞并下定决心 A对B无能为力 B对A无所作为 可能存在许多A主体和B主体占据同一个单元的情况-在这种情况下,主体之间存在很多不必要的迭代,这些迭代不能相互反应(或仅检测碰撞但不能解决它们) 。 对于占据同一单元的100个物体,这是100 ^ 100次迭代!发生这种情况是因为没有生成唯一对 -但是我无法生成唯一对,否则我将得到我不希望的行为。 有没有一种方法可以优化这种碰撞引擎? 这些是必须遵守的准则: 碰撞顺序非常重要! 身体必须一次移动一个,然后一次检查一个碰撞,然后一次移动一个就解决。 机构必须具有3个群组位组 组:身体所属的组 GroupsToCheck:人体必须检测到碰撞的组 GroupsNoResolve:团体不能解决的碰撞 在某些情况下,我只希望检测到碰撞但不能解决 更新前: 前言:我知道优化此瓶颈不是必需的-引擎已经非常快。但是,出于娱乐和教育目的,我很想找到一种使引擎更快的方法。 我正在创建一个通用的C ++ 2D碰撞检测/响应引擎,重点是灵活性和速度。 这是其架构的非常基本的图: …

5
如何将Bresenham的线算法推广到浮点端点?
我正在尝试结合两件事。我正在写一个游戏,我需要确定与浮点端点在一条线上的网格正方形。 此外,我需要它包括它碰到的所有网格正方形(即不仅是布雷森纳姆的线条,而且是蓝色的线条): 有人可以向我提供有关该操作方法的任何见解吗?显而易见的解决方案是使用朴素的行算法,但是有没有更优化的东西(更快)?

3
二维网格地图上的道路/河流生成
这是一个新手问题,但是在这里: 我的地图是2D网格,我想生成道路和河流。从起点到终点的路线一定不是瓷砖数量的最佳路线。相反,它们应该具有一定程度的随机性(回合)。 是否有针对这种情况的标准算法? 干杯! 更新: 这是在网格上使用权重并使用jgrapht库应用最短路径算法(Bellman-Ford)的结果。毕竟,我接受了多纳兹的回答。 http://pastebin.com/AGQGK5ik

2
在2D阵列中找到形状,然后进行优化
我刚刚被允许使用一张图像...下面的游戏图像显示了一些变暗的块,这些块被认为是“ T”形的一部分。可以看出,代码使带有红色斑点的块变暗,而没有看到带有绿色轮廓的“ T”形。 我的代码遍历x / y,将块标记为已使用,旋转形状,重复,更改颜色,重复。 我已经开始尝试以极大的恐惧来修复此检查。当前的想法是: 遍历网格并记下所有模式出现的情况(不使用标记框),并将其放入数组中 再次循环遍历网格,这次注意哪些块被哪些模式占用,因此哪些块被多个模式占用。 再次遍历网格,这次注意哪些模式阻碍了哪些模式 感觉不错... 我现在该怎么办? 我想我必须 尝试各种形状相互冲突的组合,从首先阻碍大多数其他图案的形状开始。我该如何处理? 使用说我有3个相互冲突的形状占据8个块的理性,每个形状是4个块,因此我最多只能有两个形状。 (我也打算合并其他形状,在进行冲突形状处理时可能需要考虑分数加权,但这可能是另一天) 我不认为这是一个垃圾箱包装问题,但是我不确定要寻找什么。希望有道理,谢谢您的帮助 编辑尽管有明确的问题,每个人似乎都已经了解了,是的, 我想在每种颜色中找到最大的“ T”形 (因为如果我给你2分,而你又获得3分,你会有点生气)

2
下降块和复杂形状
我目前有一个简单的类似Tetris的游戏,遇到了我无法解决的问题。 与俄罗斯方块中有一个单独的下降形状不同,我有多个可能需要互锁的形状需要下降;我需要计算他们的最终职位。考虑以下: 要计算绿色形状的最终位置,我只需向下扫描每个正方形,直到碰到另一个正方形或板的边缘。完成 对于多种简单形状,我会按照自己的方式进行开发。因此,发现红色不需要移动,橙色下降1,绿色下降3。完成 我不知道如何对待互锁的绿色和红色形状。使用#2的逻辑,我们最终会“卡住”漂浮在空中。如果我向下扫描以获取绿色形状,则会遇到红色,因此不会移动,反之亦然。解决方案可能是将两种形状视为一种。 与#3类似,在这种情况下,我也可以通过将对象视为一个对象而成功。 与#3和#4不同,我无法将形状视为一个形状,因为橙色形状最终会浮动一个正方形太高... 问题6的另一种变化。 可能还有其他情况,使我有许多形状在越来越复杂的情况下交织在一起,但是我认为以上内容涵盖了问题的最基本部分。 我觉得我还没有遇到/想过一个优雅的解决方案,并且非常感谢您提供任何见解,想法或资源。 解 根据下面的@ user35958的答案,我想出的解决方案确实很优雅,我创建了以下递归函数(伪代码) function stop(square1, square2){ // Skip if we're already stopped if(square1.stopped){ return; } // Are we comparing squares? if(!square2){ // We are NOT comparing squares, simply stop. square1.stopped = true; } else { // Stop IF // square1 …

3
存储十六进制网格
我一直在为Unity3D创建一个小的十六进制网格框架,并遇到了以下难题。这是我的坐标系(从此处获取): 除了我不知道如何存储外,所有这些都很好地工作。我最初打算将其存储在2D数组中,并使用图像生成我的地图。 一个问题是它具有负值(可以通过稍微偏移坐标来轻松解决此问题)。 但是,由于坐标系的原因,此类图像或位图必须是菱形的-并且由于这些结构是方形的,因此即使我一起砍东西,也会造成很多麻烦。我有什么可以解决的问题吗?我记得在统一论坛上看到过与此相关的论坛帖子,但我找不到链接。 在这里编写一组坐标翻译器是最好的解决方案吗? 如果你们认为这会有所帮助,我可以张贴代码和问题图像。

3
确定网格上的一组拼贴是否形成封闭的形状
给定网格上的一组图块,我想确定: 如果瓷砖是一个封闭的图形 如果将板的侧面算作图形的边缘时,这些瓷砖形成一个封闭的图形 如果前两个陈述中的任何一个为真,则附加图块中的其他图块将形成初始图块。 玩家将首先按下一个图块,然后将其手指拖动到其他图块以创建一串相同颜色的图块。我将检查下一个磁贴是否有效。例如 如果玩家在红瓦开始,他们唯一的下一个有效的行动是到邻近的红瓦(对角线做计数)。当用户抬起手指时,我需要能够检查上述3个项目。 所以我最初的想法是,由于我每次走时都要检查链条的有效性,所以当玩家抬起手指时,我可以检查第一个和最后一个瓷砖是否相邻。(我已经知道它们是相同的颜色。)如果它们相邻,我会预感会做出一个封闭的图形,然后我要来这里尝试看看我是否丢失了一些大东西,并得到某种逻辑/数学证明,我的直觉是正确的(或一个例子证明它是错误的。) 但是那时候我想到了项目2:我还必须考虑使用木板边缘作为封闭图形侧面的链条。在这种情况下,链中的第一个项目和最后一个项目不会相邻,但是我仍然会附上一个数字。所以现在我回到正题。 我应该如何处理这一系列的网格坐标,以确定它们是否包含封闭的图形?有一次我不知道我有一个封闭的身影,那是什么让那个属于其范围内的所有瓷砖的附加列表的最佳方式? 上面我画了我期望该测试有4种可能结果的图片。 链没有附上数字。 链确实有一个封闭的数字。 如果将板的侧面算作图形的边缘(或一个以上的边缘),则链条会形成一个封闭的图形。 该链的确制作了一个封闭的图形,但是有一些额外的数据点(用户已有效选择作为链的一部分),这些数据点不属于所创建图形的一部分。 情况4是最棘手的,因为您必须提取“额外”链节以找到封闭的图形和落入其中的零件(但不能围绕“未封闭”的区域)。 所以...有人想办法解决这个问题,还是对我来说只是一个起点?在这一点上,我有点转圈,可以使用另一组眼睛。
10 algorithm  grid  graph 

2
使用射线投射在二维网格上实现视线的更有效方法?
考虑一个2D的瓷砖网格,以及一个以视线为中心的近似坐标范围(以玩家为中心)。目标是将视线挡在障碍物(即墙)之外。 确定视野中是否有单个单元格是相对简单的:使用布雷森汉姆将光线从玩家投射到目标单元格-如果玩家和目标之间的重叠单元之一是障碍物,则目标单元格不可见。 现在,我的第一个想法是遍历视线中的所有网格单元-但这对我而言似乎效率很低。例如,如果玩家站在墙旁边,并且确定不可见墙外的单元,则可以确定射线之后的所有单元都不可见。 还考虑过将射线投射到视线范围内的每个单元格,然后沿着每个射线迭代每个单元格-但是我将不止一次处理一些单元格。 有更有效的方法吗? 虽然每圈迭代〜50个单元格是一个相对轻量级的计算,但我追求速度-目标是能够在自动播放中每秒循环几圈。因此,我可以做得越高效越好。

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.