0

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

下面示例级别图片中的每个图块都是 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] = ;
    }
}

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

非常感谢任何可以帮助我的人。我喜欢编程,但我的数学和视觉空间技能不太好……

在此处输入图像描述

4

1 回答 1

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);
            }
        }

如您所见,多维数组是一个实体,它保证每一行具有相同的大小,与其他行一样,列也是如此。

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

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

PS我从这里Point使用了结构。

于 2012-12-13T05:34:20.587 回答