gpt4 book ai didi

为二维数组调用 Array.GetLength(1) 时出现 C# IndexOutOfRangeException

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

这是代码,我注意到 Getlength 方法返回 0,但我认为它是正常的,因为 for 循环不会超过 0..我写了

int yy = tile.GetLength(1); 

它抛出与以下代码相同的异常:

 TileData[][] tile = GameMain.Level.getCollisionTiles();

Rectangle tileRectangle;
for(int x = 0; x <= tile.GetLength(0); x++)
{
for (int y = 0; y <= tile.GetLength(1); y++) //EXCEPTION THROWN HERE AT GETLENGTH !!!!
{
tileRectangle = tile[x][y].Target;
if (tileRectangle.Contains(m_hitbox)) //Si il y a collision
{
if ((m_hitbox.X + m_hitbox.Width) > tileRectangle.X) //si le joueur percute par la gauche
{
m_hitbox.X--;
}
else if (m_hitbox.X < (tileRectangle.X + tileRectangle.Width)) //Droite
{
m_hitbox.X++;
}
if ((m_hitbox.Y + m_hitbox.Height) > tileRectangle.Y) //si le joueur percute par le haut
{
m_hitbox.Y--;
}
else if (m_hitbox.Y < (tileRectangle.Y + tileRectangle.Height)) //Bas
{
m_hitbox.Y++;
}
}
}
}

编辑:我通过从 map 对象获取图 block 信息使其正常工作,但现在它抛出 NullReferenceException

        TileData[][] tile = GameMain.Level.getCollisionTiles();
int xMax = GameMain.Level.getMapHeight();
int yMax = GameMain.Level.getMapWidth();

for (int x = 0; x <= xMax; x++)
{
for (int y = 0; y <= yMax; y++)
{
Rectangle tileRectangle = tile[x][y].Target; //THIS LINE FAILS !!!!
if (tileRectangle.Contains(m_hitbox)) //Si il y a collision
{
if ((m_hitbox.X + m_hitbox.Width) > tileRectangle.X) //si le joueur percute par la gauche
{
m_hitbox.X--;
}
else if (m_hitbox.X < (tileRectangle.X + tileRectangle.Width)) //Droite
{
m_hitbox.X++;
}
if ((m_hitbox.Y + m_hitbox.Height) > tileRectangle.Y) //si le joueur percute par le haut
{
m_hitbox.Y--;
}
else if (m_hitbox.Y < (tileRectangle.Y + tileRectangle.Height)) //Bas
{
m_hitbox.Y++;
}
}
}
}

很抱歉在同一主题中问你这个问题,但我认为你可以帮助我快速解决它。

最佳答案

它不是二维数组。 TileData[][]是一个锯齿状的数组,TileData[,]是一个二维数组,那么在你的例子中,GetLength(1)总是会失败,因为 tile 只有一维。

编辑
如何解决这个问题?您可以将 tile 从 [][] 更改为 [,](例如)并保持其他一切不变(getCollisionTiles() 是如何工作的?)或者您可以更新代码以从锯齿状数组中获取正确的大小,如下所示:

for (int y = 0; y < tile[x].GetLength(0); y++)

顺便说一句,你甚至可以替换 GetLength(0)用一个简单的 Length :

for(int x = 0; x < tile.Length; x++)
{
for (int y = 0; y < tile[x].Length; y++)

最后说明:对于基于 0 的数组,长度不包括索引,因此 x <= tile.Length必须替换为 x < tile.Length .

关于为二维数组调用 Array.GetLength(1) 时出现 C# IndexOutOfRangeException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20050571/

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