Почему мой агент столкновения не работает (JavaScript) - PullRequest
2 голосов
/ 27 апреля 2019

У меня есть агент по имени куб (куб - это просто имя, на самом деле это квадрат).Каждый кубик падает и останавливается на земле, и я хочу, чтобы он обнаружил другие кубики и сложил их.

У меня проблемы с этим методом обнаружения столкновения: https://www.youtube.com/watch?v=GY-c2HO2liA&list=PLRqwX-V7Uu6Zy51Q-x9tMWIv9cueOFTFA

Я сделал2 для циклов и все, но по какой-то причине это не работает.

это основной скрипт:

var cubes = [];
var nb = 10;       //number of cubes
var gravity = .1;
var sz = 10;       //cube size

function setup() {
  createCanvas(400, 400);
  for (i = 0; i < nb; i++) {
    cubes.push(new Cube());
  }
}

function draw() {
  background(51);
  for (var i = 0; i < cubes.length; i++) {
    cubes[i].show();
    for (var j = 0; j < cubes.length; j++) {

      if (i != j && !cubes[i].collide(cubes[j]) && !(cubes[i].pos.y + sz > height)) {
        cubes[i].pos.y += gravity; 

      }
    }

  }
}

это функция куба, связанная с p5.js в файле HTML:

function Cube() {

  this.rx = (round((random(0, width - sz)) / sz) * sz);
  this.ry = (round((random(sz, height - sz)) / sz) * sz);

  this.pos = createVector(this.rx, this.ry);


  this.show = function() {
    fill(220);
    noStroke();
    rect(this.pos.x, this.pos.y, sz, sz);
  }

  this.collide = function(other) {

    if (this.pos.y + sz == other.pos.y && this.pos.x == other.pos.x) {
      return true;      
    } else {
      return false;

    }

  }

}

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

1 Ответ

2 голосов
/ 27 апреля 2019

Я думаю, что ваша проблема связана с тем, что вы используете ==, попробуйте изменить эту строку:

 if (this.pos.y + sz == other.pos.y && this.pos.x == other.pos.x) {

в

  if (this.pos.y + sz > other.pos.y  &&  this.pos.y  <= other.pos.y+sz  &&
  this.pos.x < other.pos.x+sz && this.pos.x + sz > other.pos.x)
...