在我正在制作的游戏中,我有一个通过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添加碰撞。
非常感谢能帮助我的人。我喜欢编程,但我不擅长数学和视觉空间技能......
答案 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
结构。