You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

打砖块游戏二维数组开发:对象定义阶段如何获取正确的this值?

解决打砖块游戏中砖块对象属性定义的问题

问题原因

你遇到的this.x返回undefined,是因为对象字面量内部的this并不指向当前正在创建的对象,它的指向取决于当前的执行上下文(比如严格模式或模块环境下this就是undefined)。另外,在对象还未赋值给bricks[r][c]时,直接访问bricks[r][c].x肯定无效,因为这个数组位置此时还没有对象。

解决方案

先把当前砖块的x、y坐标计算出来存到临时变量里,再用这些变量直接构建边界属性,就能彻底避开this和未赋值数组的问题:

const bricks = [];
for (let r = 0; r < brickRow; r++) {
  bricks[r] = [];
  for (let c = 0; c < brickCol; c++) {
    // 先计算当前砖块的x、y值,存到临时变量
    const brickX = r * (brickWidth + gap) + 10;
    const brickY = c * (brickHeight + gap) + 10;
    bricks[r][c] = {
      x: brickX,
      y: brickY,
      bLeft: brickX,
      bTop: brickY,
      bRight: brickX + brickWidth,
      bBottom: brickY + brickHeight
    };
  }
}

额外优化思路

如果后续砖块位置可能发生变化(比如被击中后位移),可以把边界属性改成getter函数,这样每次访问时都会自动根据当前的x、y计算最新值,不用手动同步:

const bricks = [];
for (let r = 0; r < brickRow; r++) {
  bricks[r] = [];
  for (let c = 0; c < brickCol; c++) {
    bricks[r][c] = {
      x: r * (brickWidth + gap) + 10,
      y: c * (brickHeight + gap) + 10,
      get bLeft() { return this.x; },
      get bTop() { return this.y; },
      get bRight() { return this.x + brickWidth; },
      get bBottom() { return this.y + brickHeight; }
    };
  }
}

之后修改bricks[r][c].x时,bRight这类边界属性会自动更新,不用再单独维护。

内容的提问来源于stack exchange,提问作者TyaCode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 06:47:09