【发布时间】:2018-04-25 00:26:48
【问题描述】:
我有一个二维数组,我试图用它来表示我的游戏中的某种网格。它是 5x3,看起来像:
[0,0][0,1][0,2][0,3][0,4]
[1,0][1,1][1,2][1,3][1,4]
[2,0][2,1][2,2][2,3][2,4]
问题是,我想将某个点转换为屏幕上的某个位置,但在我的二维数组中,x 似乎是垂直值而 y 是水平值。如果我想在 x = 1、y = 2 处添加一个节点,那么我实际上是在 -right- 2 和 -down- 1 处。但是当我想到 x 时,我会想到一个水平值(左/右) .我在这里设计错了吗?如何设计我的二维数组,使 x 值对应于左/右移动和 y 上/下。
我正在创建如下数组:
init(width: Int, height: Int) {
self.width = width
self.height = height
for y in 0..<height {
map.append([Tile]())
for _ in 0..<width {
map[y].append(Tile(blocked: false))
}
}
}
瓷砖只是一个保持其位置的对象和一些其他不相关的东西。谢谢!
【问题讨论】:
-
只需使用
arr[y][x]访问您的阵列 -
@vacawama 这对我来说有点违反直觉,因为我已经习惯了 x,y
-
x和y在图形/几何上不是任何东西——它们只是数组中的值。您将这些值转换为视图的部分在哪里?您可以从构建数组的方式向后声明或访问row和column,但我们看不到那部分。如果您说[1][2],那么您将“向下 1 和向右 2”,因为这就是数组访问以您在此处构建它的方式的工作方式 - 行,然后是列。您将 (1,2) 视为笛卡尔 (x,y),但事实并非如此。你真正在做的是访问[row][column]。 -
Swift 并没有真正的多维数组。您只是在构建一个数组数组。将它们构建为行的集合是很自然的,因此
arr[row][col]是自然顺序,row是垂直维度。 -
将数组更改为 [0,0],[1,0],[2,0]... 如果它对您很重要。
标签: arrays swift multidimensional-array