Неисправность JavaScript при обнаружении столкновений

Моя программа - игра, основанная на столкновениях. Однако функция обнаружения столкновений работает со сбоями и быстро увеличивает счет в случайных точках и заканчивает игру раньше, даже если игрок ни с чем не сталкивается. Я просматривал свой код в течение нескольких дней и пробовал несколько функций обнаружения столкновений, но у меня все еще возникает эта проблема. Я делаю эту игру в лаборатории приложений code.org и подозреваю, что это может быть их конец. Но я просто хотел знать, не упускаю ли я чего-то. Вот ссылка на мою программу: https://studio.code.org/projects/applab/4gT5jkTadBOpofcLX__AvAeb0R3keRYLobVqNhHYaqM

var collectedSouls = 0;
var timer = 30;
onEvent("startBtn", "click", function(event) {
  setScreen("Gamescreen");
  playSound("Windows XP startup.mp3", false);
});
onEvent("Begin", "click", function(event) {
  onEvent("Gamescreen", "keydown", function(event) {
    var x = 0;
    var y = 0;
    if (event.key == "Down") {
      y = 3;
    } else if ((event.key == "Up")) {
      y = -3;
    } else if ((event.key == "Left")) {
      x = -3;
    } else if ((event.key == "Right")) {
      x = 3;
    }
    setPosition("player", getXPosition("player") + x, getYPosition("player") + y);
    wrapAround("player");
  });
  timedLoop(1000, function() {
    setText("Timer", timer);
    timer = timer - 1;
    if (timer <= 0) {
      setScreen("GameOver");
    }
  });
});
onEvent("Begin", "click", function(event) {
  timedLoop(1, function() {
    moveObject("spirit1", randomNumber(-10, 10), randomNumber(-10, 10));
    moveObject("spirit2", randomNumber(-10, 10), randomNumber(-10, 10));
    moveObject("spirit3", randomNumber(-10, 10), randomNumber(-10, 10));
    moveObject("spirit4", randomNumber(-10, 10), randomNumber(-10, 10));
    moveObject("spirit5", randomNumber(-10, 10), randomNumber(-10, 10));
    moveObject("spirit6", randomNumber(-10, 10), randomNumber(-10, 10));
    moveObject("spirit7", randomNumber(-10, 10), randomNumber(-10, 10));
  });
});
function moveObject(object, xMove, yMove) {
  var x = getXPosition(object) + xMove;
  var y = getYPosition(object) + yMove;
  setPosition(object, x, y);
  collision(getXPosition("player"), getYPosition("player"), getProperty("player", "width"), getProperty("player", "height"), getXPosition(object), getYPosition(object), getProperty(object, "width"), getProperty(object, "height"));
  if (collision()=== true) {
    hideElement(object);
    collectedSouls = collectedSouls + 1;
    if (collectedSouls >= 7) {
        setScreen("Victory");
      }
  }
  wrapAround(object);
}
function collision(x1, y1, w1, h1, x2, y2, w2, h2) {
    w2 += x2;
    w1 += x1;
    if (x2 > w1 || x1 > w2) return false;
    h2 += y2;
    h1 += y1;
    if (y2 > h1 || y1 > h2) return false;
    return true;
}
function wrapAround(object) {
  var objx = getXPosition(object);
  var objy = getYPosition(object);
  var Width = getProperty(object, "width");
  var Height = getProperty(object, "height");
  if (objx < 0 - Width / 2) {
    objx = 320 - Width / 2;
  } else if ((objx > 320 - Width / 2)) {
    objx = 0 - Width / 2;
  } else if ((objy < 0 - Height / 2)) {
    objy = 450 - Height / 2;
  } else if ((objy > 450 - Height / 2)) {
    objy = 0 - Height / 2;
  }
  setPosition(object, objx, objy);
}

Не могли бы вы привести полный пример того, как запустить свой код? За ним довольно сложно следить, не имея возможности запустить его или не увидев, какие функции вызываются, когда

SirPeople 21.03.2018 16:47
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
329
1

Ответы 1

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

function collision(x1, y1, w1, h1, x2, y2, w2, h2) {
    w2 += x2;
    w1 += x1;
    if (x2 > w1 || x1 > w2) return false;
    h2 += y2;
    h1 += y1;
    if (y2 > h1 || y1 > h2) return false;
    return true;
}

Здесь вы хотите сравнить 2 объекта, как вы, но сохраните все в чистоте, чтобы лучше понять, что все происходит.

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

mjpez13 22.03.2018 14:57

Другие вопросы по теме