A-Frame Physics Extras - Создание "сонных" динамических тел - PullRequest
0 голосов
/ 12 марта 2019

Я использую Физические возможности A-Frame Уилла Мерфи и Физическую систему A-Frame Дона МакКарди с ручным управлением для создания интерактивных физических объектов.Я создал компонент spawner для создания новой копии всякий раз, когда пользователь протягивает закрытую руку через коллайдер, чтобы он выходил из коллайдера, «удерживая» физическую копию, которая была создана.

Кажется, что все работает нормально, пока используется базовый коллайдер для "spawner", однако, когда я добавляю компонент sleepy в мой миксин для "порожденного" объекта, spawners разрушаются после нерестаодна сущность.Я надеюсь, что кто-то, имеющий опыт работы с этими пакетами, мог бы помочь мне устранить неполадки - хотя сейчас это не конец света, если я не могу использовать sleepy на своих порожденных объектах, это может помочь предотвратить замедление позже в проекте.

Вот обработчик события столкновения для spawner и код для последующего события spawn;это в моем:

"onHit"

  onHit: function(evt) {
    var hitEl = evt.detail.body.el;
    if(!hitEl.components.grab) {
      console.log("Spawned!");
      return;
    }
    if(!hitEl.components.grab.hitEl) {
      console.log("Not holding anything!")
      if(hitEl.components.grab.grabbing) {
        this.el.emit("spawn");
        console.log("Spawned!");
      }
      return;
    }


    if(hitEl.components.grab.grabbing) {
      console.log("Holding something!")
    }
  },

"spawn"

  spawn: function() {
    var el = this.el;
    var entity = document.createElement('a-entity');
    var matrixWorld = el.object3D.matrixWorld;
    var position = new THREE.Vector3();
    var rotation = el.getAttribute('rotation');
    var entityRotation;

    position.setFromMatrixPosition(matrixWorld);
    entity.setAttribute('position', position);

    entity.setAttribute('mixin', this.data.mixin);
    entity.setAttribute('class', "seed")
    entity.addEventListener('loaded', function() {
      entityRotation = entity.getAttribute('rotation');
      entity.setAttribute('rotation', {
        x: entityRotation.x + rotation.x,
        y: entityRotation.y + rotation.y,
        z: entityRotation.z + rotation.z
      });
    });
    el.sceneEl.appendChild(entity);
  },
...