Как правильно перемещать объекты с разной скоростью в направлении оси «Y»

#javascript

#язык JavaScript

Вопрос:

Пытался сделать такой сценарий:

 let intervals = [], isClick = [], isGameOver = false, countElement = 3, count = 0, gameOver = function () {  if (isGameOver) {  return;  }  isGameOver = true;  if (countElement lt;= count) {  for (var i = 0; i lt; intervals.legth;   i) {  clearInterval(intervals[i]);  }  intervals = [];  countElement = 0;  } }, elm = function (index) {  return function () {  if (isGameOver || isClick[index]) {  return null;  }  isClick[index] = true;  clearInterval(intervals[index]);  intervals[index] = null;  if (!intervals.filter(a =gt; a).length) {  count = countElement;  gameOver();  return;  }  }; }; for (let i = 0; i lt; 17;   i) {  setTimeout(() =gt; {  element.on('pointerup', elm(i));  intervals[i] = setInterval(() =gt; {  if (countElement lt;= count) {  clearInterval(intervals[i]);  gameOver();  return;  }  if (-64 gt; element.position.y) {  clearInterval(intervals[i]);  intervals[i] = null;    count;  } else {  element.position.y -= 30;  }  }, pos.speed);  }, pos.startTime * i); }  

Это действительно работает, но по какой-то причине не всегда работает так, как должно.

Возможно, я сразу скажу вам, что требуется .. Необходимо сгенерировать необходимое количество элементов и двигаться вдоль оси Y .

У них должны быть разные скорости.
Я пытался решить эту проблему следующим образом:

 let rnd = function (min, max) {  return Math.floor(Math.random() * (max - min)   min); }, pos = {  speed: Math.floor(rnd(100, rnd(370, 470))),  startTime: Math.floor(rnd(rnd(370, 470), rnd(700, 1000))) }  

В общем, я бы хотел, чтобы элементы начали летать с разной скоростью вылета и полета, были попытки, которые можно пропустить, если элемент улетел, когда вы нажимаете на элемент, он останавливается.

Ну, на самом деле, если бы все элементы вылетели — неважно, улетели они или остановились, главное, чтобы все интервалы остановились и был бы какой-то выход …

Знатоки помогают понять, как это можно сделать без сторонних библиотек?

Как это правильно сделать, покажите, пожалуйста.

Комментарии:

1. трудно сказать, не видя проблемы в «рабочем» примере. Можете ли вы опубликовать демонстратор кода вашей проблемы с помощью кнопки lt;gt; (фрагмент кода Javascript/HTML/Css Cntrl-M) на панели инструментов редактора stackoverflow.

Ответ №1:

Проблема решена… Не было никакой необходимости обнулять countElement и intervals набирать обороты gameOver . Из-за этого последующие интервалы были зациклены, так как показатели были нарушены.