gpt4 book ai didi

c# - 如何找到列表中 x 和 y 位置值与给定 x 和 y 匹配的对象的索引

转载 作者:太空宇宙 更新时间:2023-11-03 18:40:05 25 4
gpt4 key购买 nike

我正在创建一个使用图 block 系统的游戏。每个图 block 都是一个对象,其位置有一个 Vector2。我有列表中的每个图 block 。

我还有一些代码可以生成一堆 Vector2,其中树木应该放置在瓷砖网格上。每个树位置都在一个列表中的 Vector2 中

我的问题是,如何在树坐标列表中找到与其坐标完全匹配的图 block 索引。一旦我发现我可以告诉列表中的那个 tile 对象将它的 treePresent bool 值变为真。

图 block 的 gridPosition.X 和 gridPosition.Y:0(1,9) 1(1,10) 2(2,1) 3(2,2)

树木的 treePosition.X 和 treePosition.Y :0(1,9) 1(2,2)

然后我可以说: tileList[0].treePresent=真; tileList[3].treePresent=true;

最佳答案

使用图 block 系统的游戏不应使用动态系统(列表)来跟踪图 block 。我假设“图 block 系统”指的是整个游戏世界/ map 被分成一个二维网格。这样做的原因有两个:

  1. 您可能会使用更多内存来存储完整的数据 map 。如果你的世界里真的没有太多事情发生,而且你大部分时间(80% 或更多)只会看到一个空白/默认背景图 block ,那么这个规则可能被证明是无效的。但是,对于所有具有合理数据量的情况(这是我在这里假设的情况),您将使用更多内存,因为您必须存储图 block 类型和 x&y 坐标,而不是仅存储图 block 类型。
  2. 动态数据结构效率低下。以这种方式获取图 block 数据将花费很长时间,因为您必须遍历整个列表才能找到特定的图 block 。因此,如果您想要图 block (a,b),则必须遍历所有图 block (找到正确的图 block 后停止),并将每个图 block 的每个 (x,y) 与 (a,b) 进行比较。听起来效率不是很高,是吗?

所以解决方法很简单:制作一个二维瓷砖阵列。第一个维度用于您的 x 坐标,第二个维度用于 y。

例如:worldData[x][y](或等同于您选择的语言)。以这种方式,找到一个瓷砖是非常即时的。在这里,如果我想要 tile (a,b),我只需调用 worldData[a][b]。无需循环或比较。

有什么问题吗?

关于c# - 如何找到列表中 x 和 y 位置值与给定 x 和 y 匹配的对象的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9881158/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com