Javascript 调整精灵大小会导致空引用异常
我正在建立一个扫雷游戏,它有一个10x13的格子(图1)。 在Inspector中,每个瓷砖都位于X轴和Y轴(0到9和0到12)上 我想调整这些瓷砖的大小(图2),但是如果我做了任何更改,当项目加载时,我会得到下面的错误。 IndexOutOfRangeException:索引超出了数组的边界 当我点击任何一块瓷砖时,我会得到以下错误。 NullReferenceException:对象引用未设置为对象的实例 此异常与以下代码snipet有关,该代码编写在void Start上 IndexOutOfRangeException:索引超出了数组的边界 而该例外情况与以下类别相关 NullReferenceException:对象引用未设置为对象的实例 有时候瓷砖有用,有时候不行。Javascript 调整精灵大小会导致空引用异常,javascript,unity3d,sprite,Javascript,Unity3d,Sprite,我正在建立一个扫雷游戏,它有一个10x13的格子(图1)。 在Inspector中,每个瓷砖都位于X轴和Y轴(0到9和0到12)上 我想调整这些瓷砖的大小(图2),但是如果我做了任何更改,当项目加载时,我会得到下面的错误。 IndexOutOfRangeException:索引超出了数组的边界 当我点击任何一块瓷砖时,我会得到以下错误。 NullReferenceException:对象引用未设置为对象的实例 此异常与以下代码snipet有关,该代码编写在void Start上 IndexO
是否有其他设置方法?您确定它是javascript吗?看起来像C:) 该问题在您提供的屏幕截图上可见 您可以将
x
和y
从游戏对象的位置投射到int
,并将它们用作数组的索引。但是现在,看第二个屏幕截图-定位/缩放后,元素位于(-1.194,-0.635)
。当这些值被转换为int时,您会得到-1
和0
。猜猜当尝试使用这些值访问数组时会发生什么?IndexOutOfRangeException
正如我们已经证明的,场景中的位置不再与数组索引对应,因此数组中的某些元素很可能根本没有初始化。当迭代元素
并尝试从null元素访问数据时,它抛出NullReferenceException
如何修复它?不应依赖场景位置来注册元素。我将颠倒逻辑:为元素对象创建一个预置,并使用从该预置实例化的对象填充电路板的脚本。在那里定义数组,并在实例化时将每个元素添加到其中。当然,您需要定义其他属性,如元素偏移和起始位置,以便所有内容都正确显示。但它也可以让您灵活地定制电路板尺寸
// Register in Grid
int x = (int)transform.position.x;
int y = (int)transform.position.y;
Playfield.elements[x, y] = this;
public class Playfield
{
// The Grid itself
public static int w = 10; // this is the width
public static int h = 13; // this is the height
public static Element[,] elements = new Element[w, h];
// Uncover all Mines
public static void uncoverMines()
{
foreach (Element elem in elements)
if (elem.mine) elem.loadTexture(0);
}