繁体   English   中英

我不明白数组语句

[英]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)位置放置了一个包含两个字段的文字对象xy 这两个字段的值为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM