[英]I don't understand array statement
我正在关注 Mozilla 网站上的 2D 突破游戏教程。 有一些我不明白的代码。
var brickRowCount = 3;
var brickColumnCount = 5;
var brickWidth = 75;
var brickHeight = 20;
var brickPadding = 10;
var brickOffsetTop = 30;
var brickOffsetLeft = 30;
var bricks = [];
for(c = 0; c < brickColumnCount; c++) {
bricks[c] = []; // <-- here
for(r = 0; r < brickRowCount; r++) {
bricks[c][r] = { x: 0, y: 0 }; // <-- here
}
}
我大体上理解代码的作用,但是,有几行不清楚它们的作用。 根据该网站的说法,“我们将所有的积木放在一个二维数组中。它将包含积木列 (c),而积木列又包含积木行 (r),而这些列又包含一个对象,其中包含在屏幕上绘制每块砖的 x 和 y 位置。”
我在我特别不理解的代码行旁边添加了注释。 有人可以澄清一下这些陈述的确切含义吗?
谢谢
它正在创建一个多维数组,或者另一种调用它的方式,一个数组数组。
数组的每个元素都是另一个数组,因此要访问它们,您需要为每个维度使用多个[]
。就像任何其他数组一样,它们需要被初始化。
所以在这里
bricks[c] = [];
它被初始化为数组的每个元素bricks
的阵列
bricks[c][r] = { x: 0, y: 0 };
这里是在数组bricks[c]
位置r
存储一个对象(这意味着数组bricks
位置c
的元素也是一个数组)
一些可能有帮助的评论
// create a new empty array, `[]`, in `bricks` at position `c`
bricks[c] = []
// create a new brick, {x:0,y:0}, in `bricks[c]` at position `r`
bricks[c][r] = { x: 0, y: 0 };
bricks[c]
是砖块数组中的一个数组。
bricks[c][r]
包含砖块的坐标。
它正在创建数组砖,然后在其中创建一个c
数组并使用r
添加值。
可以这样写让你形象化: bricks[bricks[c][r]]
它表示在数组中的(c,r)
位置放置了一个包含两个字段的文字对象: x
和y
。 这两个字段的值为0
语法{x: 0 ,y: 0}
是创建包含两个字段的对象并同时为这些字段赋值的简写。
bricks[c] = []
将数组元素编号c
设置为空数组。
例如,如果您在没有第二部分的情况下运行 for 循环:
var bricks = [];
for(c = 0; c < brickColumnCount; c++) {
bricks[c] = [];
}
bricks
将是[ [ ], [ ], [ ], [ ], [ ] ]
如果你运行完整的代码, bricks
将是
[
[ { x: 0, y: 0 }, { x: 0, y: 0 }, { x: 0, y: 0 } ],
[ { x: 0, y: 0 }, { x: 0, y: 0 }, { x: 0, y: 0 } ],
...
]
把它想象成一个矩阵,其中c
是列, r
是行, x
是交叉点cr
处的单元格
c\r r0 r1 r2 .. rn
c0 x00 x01 x02 .. x0n
c1 x10 x11 x12 .. x1n
.. .. .. .. .. ..
cn xn0 xn1 xn2 .. xnn
必须初始化数组(这就是您的代码中显示的内容),数组(矩阵)的每个单元格都将被分配一个值,并且可能(只是我的猜测)该值将通过游戏期间发生的事件进行更改,或者他们将被检查或两者兼而有之。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.