Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 调整精灵大小会导致空引用异常_Javascript_Unity3d_Sprite - Fatal编程技术网

Javascript 调整精灵大小会导致空引用异常

Javascript 调整精灵大小会导致空引用异常,javascript,unity3d,sprite,Javascript,Unity3d,Sprite,我正在建立一个扫雷游戏,它有一个10x13的格子(图1)。 在Inspector中,每个瓷砖都位于X轴和Y轴(0到9和0到12)上 我想调整这些瓷砖的大小(图2),但是如果我做了任何更改,当项目加载时,我会得到下面的错误。 IndexOutOfRangeException:索引超出了数组的边界 当我点击任何一块瓷砖时,我会得到以下错误。 NullReferenceException:对象引用未设置为对象的实例 此异常与以下代码snipet有关,该代码编写在void Start上 IndexO

我正在建立一个扫雷游戏,它有一个10x13的格子(图1)。 在Inspector中,每个瓷砖都位于X轴和Y轴(0到9和0到12)上

我想调整这些瓷砖的大小(图2),但是如果我做了任何更改,当项目加载时,我会得到下面的错误。 IndexOutOfRangeException:索引超出了数组的边界

当我点击任何一块瓷砖时,我会得到以下错误。 NullReferenceException:对象引用未设置为对象的实例

此异常与以下代码snipet有关,该代码编写在void Start上

IndexOutOfRangeException:索引超出了数组的边界

而该例外情况与以下类别相关

NullReferenceException:对象引用未设置为对象的实例

有时候瓷砖有用,有时候不行。
是否有其他设置方法?

您确定它是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);
}