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

#javascript #timing

#javascript #время

Вопрос:

Итак, у меня есть функция обнаружения столкновений, которую я использую для всех спрайтов «Мусора». Я перебираю каждый спрайт «Мусора» и вызываю эту функцию. Проблема в том, что иногда у игры недостаточно времени, чтобы обнаружить касание «пулевого» спрайта, прежде чем он удалится от спрайта, не касаясь его. Я не уверен, как бороться с этим, кроме, возможно, замедления пули, что я бы предпочел, чтобы меня не заставляли делать. Это часть моего «маркерного» кода:

     document.addEventListener("gameLoop", function () {
      for (var l = 0; l < bullets.length; l  ) {
          (function () {
              var n = bullets[l]
              syncPosition(n)
              n.drawSprite()
              move(n, n.speed)
              n.distanceCount  = n.speed //n.speed = 30
              if (n.distanceCount > 500) {
                  deleteSprite(n, l)              }
          })()
      }
    })
  

Это часть моего кода «мусора»:

   document.addEventListener("gameLoop", function () {
      for (var l = 0; l < debris.length; l  ) {
          (function () {
              var n = debris[l]
              var y = 0
              if (tickCount % 30 == 0) {
                  n.speed = (Math.random()   .5) * 2
              }
              if (!freezeDebris) {
              var y = n.element.style.top.replace(/[^d.]/g,'');
              y = Number(y)
              y  = n.speed
              if (y <= window.innerHeight   window.scrollY) {
                  y  = "px"
                  n.element.style.top = y
              } else {
                  deleteSprite(n, l)
              }
            }
              if (detectTouch(n, bullets)) {
                  deleteSprite(n, l)
              }
  

Это пример того, что я вижу:
https://imgur.com/a/9SUs3oi

И если вам нужно больше контекста, вот весь мой проект: https://drive.google.com/drive/folders/1eSGxBPHy2cWASaxYUW3TivtirRyZm5Xy?usp=sharing

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

1. Запускайте игровой цикл в два раза чаще и замедляйте все в 2 раза.

2. Я думаю, вам следует использовать repl.it вместо Google docs.