Shawn246 Ответов: 1

Почему не работает обнаружение столкновений? (П5 JS в рамках )


Я создал обнаружение столкновений между змеей и базовым врагом. Я создал цикл for, чтобы создать пять разных врагов, но обнаружение столкновений не вызывается ни на одном из врагов, которые были созданы из цикла for. Столкновение работает только с одним базовым объектом-врагом. Почему функция столкновения не вызывается для всех врагов внутри массива? Спасибо.

Sketch.js
var snake;
var food;
var basicEnemy;
var scl = 20;
var enemies = [];

function setup() {
  createCanvas(600, 500);
  snake = new Snake();
  basicEnemy = new BasicEnemy();

  //** CREATE FIVE ENEMIES **
  for (var i = 0; i < 5; i++) {
    enemies[i] = new BasicEnemy();
    } 
  }

  // **FUNCTION WHEN SNAKE HITS ENEMY**
  function collision() {
    console.log("hit!");
  }

  function draw() {
    background(51);

    //Draw snake 
    snake.update();
    snake.show();

    //Draw basicEnemy
    basicEnemy.update();
    basicEnemy.show();

    //** LOOP THROUGH ENEMIES AND UPDATE AND SHOW ** 
    for (var i = 0; i < enemies.length; i++) {
     enemies[i].show();
     enemies[i].update();

     if (enemies[i].hits(snake)) {
      collision();
     }
  }
}


BasicEnemy.js

function BasicEnemy() {
  this.x = random(700);
  this.y = random(700);
  this.velX = 15;
  this.velY = 15;
}

//** FUNCTION TO CHECK IF ENEMY AND SNAKE ARE IN THE SAME LOCATION **
this.hits = function (pos) {
  var = d = dist(this.x, this.y, pos.x, pos.y);
   if(d < 1) {
     return true;
   } else {
     return false;
   }
}

this.show = function () {
  fill(255, 0, 100);
  rect(this.x, this.y, scl, scl);
} 


snake.js
function Snake() {
   this.x = 0;
   this.y = 0;
   this.xspeed = 1;
   this.yspeed = 0;

   this.update = function() {
     this.x = this.x + this.xspeed * scl;
     this.y = this.y + this.yspeed * scl;

     this.x = constrain(this.x, 0, width - scl);
     this.y = constrain(this.y, 0, height - scl);
  }

  this.show = function() {
    fill(255);
    rect(this.x, this.y, scl, scl);
  } 


Что я уже пробовал:

Я устал менять код много раз, но, кажется, могу заставить его работать. Я новичок в js, так что все будет полезно. спасибо.

1 Ответов

Рейтинг:
2

Patrice T

Цитата:
Я устал менять код много раз, но, кажется, могу заставить его работать.

Изменение кода, не зная, что не так, - это просто пустая трата времени.
Первый шаг - использовать отладчик, чтобы проверить, что работает должным образом, а что нет. Как только вы видите, что не работает и как это не работает, вы можете сделать cprrections.

Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволяет вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения, это невероятный инструмент обучения.

Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010-YouTube[^]

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