如何使用锯齿状阵列记录这些瓷砖的x轴和y轴?

时间:2012-12-13 04:51:48

标签: c# jagged-arrays

在我正在制作的游戏中,我有一个通过XML文件创建的关卡。使用嵌套for循环绘制级别。我试图制作另一个嵌套的for循环来获取每个tile的位置并将其分配给锯齿状数组。我想这样做,所以我可以为每个瓷砖进行碰撞检测。

以下示例级别的图片中的每个图块是20x20像素,具有30x30图块,屏幕分辨率为600x600。这个级别是使用免费软件Realm Factory制作的,它缺少文档,没有真正的支持......但是,currentLevel.Rows在这里等于30,对于currentLevel.Columns也是如此。

以下是我到目前为止尝试制作的内容,它并不多。无论我尝试多少,我的大脑都拒绝理解锯齿状阵列。我甚至无法弄清楚如何创建它们!

int a = 0;
int b = 0;
int x = 0;
int y = 0;
int[,] size = new int[currentLevel.Rows, currentLevel.Columns]'
int[,] pos = new int[600,600];
int[] tiles = new int[600];


for (a = 0; a < 600; a += 20, x++)
{
    for (b = 0; b < 600; b += 20, y++)
    {
        size[x][y] = ;
    }
}

我想要分配给tile [x,y]的是每个tile的X和Y位置,因此我可以为每个tile添加碰撞。

非常感谢能帮助我的人。我喜欢编程,但我不擅长数学和视觉空间技能......

enter image description here

1 个答案:

答案 0 :(得分:1)

位置是一个点(它有横坐标和纵坐标),而不是整数。 此外,如果你有一个矩阵(瓷砖为20x20,或像素为600x600),为什么要尝试将其存储在锯齿状阵列中?这就是多维数组的目的:

        var tileSize = 20;
        var screenSizeInTiles = 30;

        // initializing multidimensional array of points
        var tilePositions = new Point[screenSizeInTiles, screenSizeInTiles];

        for (var x = 0; x < screenSizeInTiles; x++)
        {
            for (var y = 0; y < screenSizeInTiles; y++)
            {
                tilePositions[x, y] = new Point(x * tileSize, y * tileSize);
            }
        }

锯齿状数组进行比较:

        // initializing jagged array of points
        var tilePositions = new Point[screenSizeInTiles][];
        for (var i = 0; i < screenSizeInTiles; i++)
        {
            // each item in a jagged array is a one-dimensional array of points.
            tilePositions[i] = new Point[screenSizeInTiles];
        }

        for (var x = 0; x < screenSizeInTiles; x++)
        {
            for (var y = 0; y < screenSizeInTiles; y++)
            {
                tilePositions[x][y] = new Point(x * tileSize, y * tileSize);
            }
        }

正如您所看到的,多维数组是一个实体,它保证每行的大小与其他行相同,对于列也是如此。

反过来,锯齿状数组是数组数组,其中每个成员(数组)可以具有长度,这与其“邻居”的长度不同。

当然,您可以将矩阵表示为锯齿状数组,这将是特殊情况(锯齿状数组的所有成员将具有相同的长度),但这不太方便使用。

P.S。我使用了here中的Point结构。