c# - 有没有办法在一段时间后(不是立即)在 for 循环中执行操作?
问题描述
所以我正在制作一个扫描网格和每个正方形的邻居的函数,并更改网格中的某些值(死/活)。我目前的问题是:在完成整个扫描之前对网格的某些部分进行了修改。这意味着扫描结果会出错。这是函数的代码:
public void GridScan(Vector3 worldposition, int range)
{
GetXY(worldposition, out int originx, out int originy);
for (int x = 0; x < range; x++)
{
for (int y = 0; y < range; y++)
{
Debug.Log(GetValue(originx + x, originy + y));
if ((GetValue(originx + x, originy + y)) == 100)
{
if (Neighbours(GetWorldPosition(x, y), 2) < 2)
{
SetValue(x, y, 0);
}
if (Neighbours(GetWorldPosition(x, y), 2) > 3)
{
SetValue(x, y, 0);
}
}
if ((GetValue(originx + x, originy + y)) == 0)
{
if (Neighbours(GetWorldPosition(x, y), 2) == 3)
{
SetValue(x, y, 100);
}
}
}
}
}
一点上下文:“GetXY”只是将vector3世界位置转换为图形的坐标。
两个 for 循环从原点扫描整个图形,从 (0,0)-(range,0) 然后 (0,1)-(range,1) 等。
“SetValue”和“GetValue”完全按照他们所说的输入两个坐标。
“邻居” 扫描具有特定值邻居的邻居数量。
"GetWorldPosition" 将 x,y 坐标转换为 "Neighbours" 可以使用的向量 3。
在 for 循环完成后,无论如何要执行“SetValue”吗?我可以创建一个网格的实例吗(如果可以,如何?)?这些方法能解决我的问题吗?这是我的第一个项目,对我来说如此赤裸裸。
解决方案
只需创建您将要进行的所有更改的列表,并在循环后按顺序完成它们。List<(int x, int y, int funkyNumber)>
注意我不确定这些天你是否可以统一使用 ValueTuples。如果不能,您可以创建自己的结构
例子
var list = new List<(int x, int y, int funkyNumber)>();
GetXY(worldposition, out int originx, out int originy);
for (int x = 0; x < range; x++)
{
for (int y = 0; y < range; y++)
{
Debug.Log(GetValue(originx + x, originy + y));
if ((GetValue(originx + x, originy + y)) == 100)
{
if (Neighbours(GetWorldPosition(x, y), 2) < 2)
list.Add((x, y, 0));
if (Neighbours(GetWorldPosition(x, y), 2) > 3)
list.Add((x, y, 0));
}
if ((GetValue(originx + x, originy + y)) == 0)
{
if (Neighbours(GetWorldPosition(x, y), 2) == 3)
list.Add((x, y, 100));
}
}
}
foreach (var item in list)
SetValue(item.x,item.y,item.funkyNumber)
推荐阅读
- ios - iOS 14 小部件未更新
- bash - 使用 bash 脚本将 xml 标签添加/插入到现有的 xml 文件中
- react-native - 在 React Native 中查找硬编码字符串(使用 WebStorm)
- javascript - 找不到变量 Safari - Safari 扩展
- r - 同一行上的徽标和文字 警官 R
- javascript - 我正在尝试在 jsx-react 中动态添加图像,但它不会显示
- swift - 在 SwiftUI 中传递 html 字符串时加载本地 js 文件
- machine-learning - conv3d pytorch中的内核深度=1是什么意思
- azure - 如何使用翻转窗口触发器将 ADF 复制管道参数化为回溯和回填
- c++ - 如何在 C++ 中使用没有#include 的 cout 和 cin?