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