Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用锯齿阵列记录这些瓷砖的x轴和y轴?_C#_Jagged Arrays - Fatal编程技术网

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

C# 如何使用锯齿阵列记录这些瓷砖的x轴和y轴?,c#,jagged-arrays,C#,Jagged Arrays,在我正在制作的游戏中,我有一个通过XML文件创建的关卡。使用嵌套的for循环绘制标高。我正在尝试创建另一个嵌套for循环,以获取每个磁贴的位置,并将其指定给锯齿阵列。我想这样做,这样我就可以为每个瓷砖进行碰撞检测 下面示例级别图片中的每个分幅为20x20像素,分幅为30x30,屏幕分辨率为600x600。该级别是由自由软件领域工厂制作的,该工厂缺乏文档,也没有真正的支持。。。但是,currentLevel.Rows在这里将等于30,currentLevel.Columns也是如此 下面是我到目前

在我正在制作的游戏中,我有一个通过XML文件创建的关卡。使用嵌套的for循环绘制标高。我正在尝试创建另一个嵌套for循环,以获取每个磁贴的位置,并将其指定给锯齿阵列。我想这样做,这样我就可以为每个瓷砖进行碰撞检测

下面示例级别图片中的每个分幅为20x20像素,分幅为30x30,屏幕分辨率为600x600。该级别是由自由软件领域工厂制作的,该工厂缺乏文档,也没有真正的支持。。。但是,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] = ;
    }
}
inta=0;
int b=0;
int x=0;
int y=0;
int[,]size=new int[currentLevel.Rows,currentLevel.Columns]'
整数[,]pos=新整数[600600];
int[]tiles=新int[600];
对于(a=0;a<600;a+=20,x++)
{
对于(b=0;b<600;b+=20,y++)
{
尺寸[x][y]=;
}
}
我想要分配给tiles[x,y]的是每个tile的x和y位置,这样我就可以为每个tile添加碰撞

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

位置是一个点(它有一个横坐标和一个纵坐标),而不是一个整数。 此外,如果你有一个矩阵(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);
            }
        }
var tileSize=20;
变量屏幕大小百分比=30;
//初始化多维点数组
变量tilePositions=新点[screenSizeInTiles,screenSizeInTiles];
对于(变量x=0;x
与锯齿阵列相比:

//初始化参差不齐的点数组
var tilePositions=新点[screenSizeInTiles][];
对于(变量i=0;i
如您所见,多维数组是一个实体,它保证每一行的大小与其他行相同,列的大小也相同

交错数组又是数组的数组,其中每个成员(数组)都可以有长度,这与它的“邻居”的长度不同

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


另外,我使用了来自的
结构。

我看到的第一个问题是,您将“size”声明为锯齿状数组,然后尝试将其用作二维数组(例如,“size[x,y]”是二维数组,而size[x][y]是锯齿状数组)。这可能会有帮助。但是对于这个问题,我应该使用两个锯齿状数组,对吗?我很难将其概念化,所以我不能完全确定。在我看来,不需要将位置存储在另一个数组中,因为x和y位置是数组值。例如,tile[0][0]将包含左上角tile的所有数据,tile[1][0]将是第二列顶部的tile,依此类推。您最好创建自己的平铺结构来存储所需的任何信息。@SeanHeiss:position是一个点(它有一个横坐标和一个纵坐标),而不是一个整数。此外,如果你有一个矩阵(20x20分片,或者600x600像素),为什么你要把它存储在锯齿阵列中?这就是二维数组的用途。好问题。我不知道。我不完全理解数组,所以我不确定使用哪个。叫我白痴,但我正在尽最大努力。:)谢谢!现在给我一点时间在我的项目中实现它,我会报告它是如何进行的。
        // 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);
            }
        }