我的函数中有一个布尔值决定了要调用的函数.正在进行的两个函数都称为回放数组.
现在在我眼里Hex[] areaHexes确实存在,但编译器没有编译,因为它认为它没有设置(不存在).
如何根据bool semiRandom具有的值调用其中一个功能?
void ElevateArea(int q, int r, int range, bool semiRandom = false, float centerHeight = 1f)
{
Hex centerHex = GetHexAt(q, r);
if (semiRandom)
{
Hex[] areaHexes = GetSemiRandomHexesWithinRangeOf(centerHex, range);
}
else
{
Hex[] areaHexes = GetHexesWithinRangeOf(centerHex, range);
}
foreach (Hex h in areaHexes)
{
//if (h.Elevation < 0)
// h.Elevation = 0;
h.Elevation += 0.5f * Mathf.Lerp(1f, 0.25f, Hex.Distance(centerHex, h ) / range);
}
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 10
它不工作的原因是你当前声明了两个调用的局部变量areaHexes,每个变量都有一个范围,它只是它们声明的块 - 所以当你尝试使用它们时它们都不在范围内.
布兰登的答案(在声明之外声明变量if然后从不同的地方分配它)将正常工作 - areaHexes现在在你以后使用它时的范围.但是,您可以使用条件?:运算符更简单地执行此操作:
Hex[] areaHexes = semiRandom
? GetSemiRandomHexesWithinRangeOf(centerHex, range)
: GetHexesWithinRangeOf(centerHex, range);
Run Code Online (Sandbox Code Playgroud)
你areaHexes的if-else块在你的块中被声明,它在这些块的范围之外是不可见的.您有两个不同的局部areaHexes变量:
if (semiRandom)
{
// This definition of areaHexes is visible only within these { }
// and is not the same as the one in the else block below
Hex[] areaHexes = GetSemiRandomHexesWithinRangeOf(centerHex, range);
}
else
{
// This definition of areaHexes is visible only within these { }
// and is not the same one as the one above
Hex[] areaHexes = GetHexesWithinRangeOf(centerHex, range);
}
Run Code Online (Sandbox Code Playgroud)
在外面声明:
Hex[] areaHexes;
if (semiRandom) {
areaHexes = GetSemiRandomHexesWithinRangeOf(centerHex, range);
}
else {
areaHexes = GetHexesWithinRangeOf(centerHex, range);
}
Run Code Online (Sandbox Code Playgroud)
或者,使用?:Jon显示的第三级运算符.
您应该查找C#的变量范围规则.