Элемент массива загадочно перезаписан - PullRequest
0 голосов
/ 16 апреля 2020

Я изучаю p5. js.

У меня есть функция, которая вызывается в setup () (не волнуйтесь, просто вызов в настройке, он определен в другом месте):

CreateMaze = () => {
  for(let i = 1; i <= numTiles; i++) {
    let newTile = CreateTile(i);
    let tileAdded = false;
    while(!tileAdded) {
      for(let j = 0; j < tiles.length; j++) {
        print('new tile ' + newTile.x + ' ' + newTile.y);
        print('array tile ' + tiles[j].x + ' ' + tiles[j].y);
        if(newTile.x == tiles[j].x && newTile.y == tiles[j].y) {
          print('new tile ' + newTile.x + ' ' + newTile.y);
          print('array tile ' + tiles[j].x + ' ' + tiles[j].y);
          newTile = CreateTile(i);
        } else {
          tiles.push(newTile);
          tileAdded = true;
        }
      }
    }
  }
}

Также в setup () я создаю плитку с let centralTile = new Tile(floor(windowWidth/2), floor(windowHeight/2),'#4caf50'); и pu sh в виде массива tiles.push(centralTile);.

CreateTile:

CreateTile = (ndx) => { 
  print('creating tile; index: ' + ndx);
  let dir = ChooseDir(); //choose a direction
  print(dir);
  let xoff, yoff;
  switch(dir) { //assign an offset value
    case "N": xoff = 0; yoff = -50; break;
    case "E": xoff = 50; yoff = 0; break;
    case "S": xoff = 0; yoff = 50; break;
    case "W": xoff = -50; yoff = 0; break;
  }

  //create a tile based on previous tile's location
  let newTile = new Tile(tiles[ndx - 1].x + xoff, tiles[ndx - 1].y + yoff);
  print('new tile ' + newTile.x + ' ' + newTile.y);
  print('array tile (' + ndx-1 + ') ' + tiles[ndx-1].x + ' ' + tiles[ndx-1].y);
  return newTile;
}

Я сталкиваюсь с проблемой, когда первая плитка, созданная мной при настройке, совпадает со второй, полученной из CreateTile(). Я использовал операторы print, чтобы увидеть, где меняется значение для первого тайла. Это прямо перед if. После создания второй плитки prints говорит мне, что они разные. Но перед тем, как сравнить их, они одинаковы. Я не могу понять, почему / как я изменяю значения этого начального элемента массива. Я не могу найти ничего, что могло бы предположить, что это меняется. Как я уже сказал, когда я создаю вторую плитку, она отличается от первой (как и должно быть). Но когда приходит время сравнивать, они совпадают. Где происходит это изменение?

...