【发布时间】:2012-12-13 04:51:47
【问题描述】:
在我正在制作的游戏中,我有一个通过 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添加碰撞。
非常感谢任何可以帮助我的人。我喜欢编程,但我的数学和视觉空间技能不太好......
【问题讨论】:
-
我能看到的第一个问题是,您将“size”声明为锯齿状数组,然后尝试将其用作二维数组(例如,“size[x,y]”是一个二维数组,并且size[x][y] 是一个锯齿状数组)。这可能会有所帮助。 msdn.microsoft.com/en-us/library/2s05feca(v=vs.80).aspx
-
但是我应该使用两个锯齿状数组来解决这个问题,这对吗?我很难把这个概念化,所以我不完全确定。
-
在我看来,您不需要将位置存储在另一个数组中,因为 x 和 y 位置是数组值。例如,tile[0][0] 将包含左上角的 tile 的所有数据,tile[1][0] 将是第二列顶部的 tile,依此类推。您可能会更好地创建自己的 tile 结构来存储您需要的任何信息。
-
@SeanHeiss:位置是一个点(它有一个横坐标和一个纵坐标),而不是一个整数。此外,如果你有一个矩阵(20x20 的瓦片,或 600x600 的像素),你为什么要把它存储在 jagged 数组中?这就是二维数组的用途。
-
好问题。我不知道。我不完全理解数组,所以我不确定使用哪个。叫我白痴,但我正在尽我最大的努力。 :)
标签: c# jagged-arrays