Задать вопрос
@eydeveloper

Как сделать, чтобы количество врагов увеличивалось?

Есть функция Enemy (генератор врагов), нужно сделать так, чтобы при вызове enemy.createEnemy координаты менялись с помощью функции enemySpaw. Но получается так, что все время один враг на экране, только меняет свои координаты. Возможно я неправильно создаю объект enemy.

setInterval(spawnEnemies, 1000); // при определенном действии начинается генерация врагов
...
function Enemy() {
  enemySpawn = (min, max) => {
    return Math.floor(Math.random() * (max - min) + min);
  }
  this.enemy = {
    sprite: document.getElementById("enemy").style,
    anim: document.getElementById("enemy-sprite"),
    y: 58,
    w: 146,
    h: 206
  }; 
this.createEnemy = () => {
    this.enemy.sprite.display = "inline";
    this.enemy.sprite.position = "absolute";
    this.enemy.sprite.top = 58 + "vh";
    this.enemy.sprite.width = enemy.w + "px";
    this.enemy.sprite.height = enemy.h + "px";
    this.enemy.sprite.left = enemySpawn(centerPosition, document.documentElement.clientWidth - this.enemy.w) + "px";
  }
}
function spawnEnemies() {
  var enemy = new Enemy();
  for (var i = 0; i < 1; i++) {
    enemy.createEnemy();
  }
}
  • Вопрос задан
  • 141 просмотр
Подписаться Простой 2 комментария
Помогут разобраться в теме Все курсы
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
  • Академия Эдюсон
    Fullstack-разработчик на JavaScript + ИИ
    11 месяцев
    Далее
  • ProductStar × РБК
    Профессия: Инженер по тестированию + ИИ
    6 месяцев
    Далее
Решения вопроса 1
dollar
@dollar
Делай добро и бросай его в воду.
В spawnEnemies() вы создаёте одно врага и дальше в цикле вызываете для него createEnemy(), но это один и тот же объект врага, а вы просто меняете ему координаты каждый раз, обращаясь к this.

В цикле у вас всего одна итерация.

enemySpawn у вас глобальная функция. Нужно либо this.enemySpawn, либо вынести её за пределы Enemy, чтобы не пересоздавать каждый раз.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы