Я пытаюсь нанести на карту свои препятствия одним объектом.

Я использовал random, чтобы случайным образом разбросать его по карте, теперь я хочу жестко закодировать координату X и Y с помощью массива чисел, но машинописный текст использует только последнее значение цикла для координаты X. Как мне присвоить конкретные номера каждому препятствию?

генерировать случайным образом

module objects {
    export class Obstacles extends objects.GameObject {
        public Start():void {

            this.x = Math.floor(Math.random() * (640) - this.width) + this.halfWidth;
            this.y = Math.floor(Math.random() * (480) - this.width) + this.halfWidth;
            console.log("x " + this.x);
            console.log("y " + this.y);

  }
}

enter image description here

укажите значение x с помощью массива

private _obstX: number [] = [200, 250, 300, 350, 400];

public Start():void {

      for (let count = 0; count < this._obstX.length; count++) {
          this.x = this._obstX[count];
      }

      this.y = Math.floor(Math.random() * (480) - this.width) + this.halfWidth;
      console.log("x " + this.x);
      console.log("y " + this.y);

  }

enter image description here

Присваивается только одно значение x, другое значение x в массиве игнорируется

Код в основном файле

private _obstPlanes: objects.Obstacles[];
private _obstNum: number;

public Start(): void {
  this._obstPlanes = new Array<objects.Obstacles>();
  this._obstNum = 5;


  for (let count = 0; count < this._obstNum; count++) {
    this._obstPlanes[count] = new objects.Obstacles(this.assetManager);
  }
}
public Main(): void {
  this._obstPlanes.forEach(obstPlane => {
      this.addChild(obstPlane);
  });
}
1
Psycho Li 15 Мар 2018 в 07:35

1 ответ

Лучший ответ

Каждый раз, когда вы создаете экземпляр нового объекта Obstacles, вы проходите цикл по массиву _obstX, устанавливая для свойства x n-е значение из вашего массива. Все ваши Obstacles имеют значение x, равное 400, потому что последняя итерация цикла for устанавливает this.x на последнее значение в массиве.

Я бы переместил массив _obstX в главный файл и добавил параметр / свойство x в ваш конструктор Obstacles. Я не уверен, как сейчас выглядит ваш конструктор, но это может быть что-то вроде:

constructor(private assetManager: AssetManger, private x: number) {}

Затем вызовите конструктор с помощью:

new objects.Obstacles(this.assetManager, _obstX.shift())

Это отправит первый элемент в _obstX конструктору и удалит это значение из массива. Когда вы создаете каждый объект Obstacles, он будет иметь следующее значение x из массива.

1
ShaneCoder 15 Мар 2018 в 08:13