Событие захвата 'пересечение лучей' - PullRequest
0 голосов
/ 30 августа 2018

Мне нужно захватить событие raycaster-intersected каждый раз, когда оно происходит.

Мне нужно расстояние до первой обнаруженной сущности для проверки столкновений, но событие запускается только при первом попадании лучей в объект.

Если raycaster все еще касается объекта, он не вызывает событие.

У меня есть следующий код:

AFRAME.registerComponent("follow-body", {
  'schema': {
    entityId: {
      type:'string',
      default:''
    }
  },
  init: function(){
    this.pibot = document.querySelector("#" + this.data.entityId);
  },
  tick: function(){
    let pibotPos = this.pibot.object3D.position;
    let pibotRotation = this.pibot.object3D.rotation;
    let el = this.el;
    pibotPos.y += 0.2;

    el.object3D.position.set(pibotPos.x, pibotPos.y, pibotPos.z);
    el.object3D.rotation.set(pibotRotation.x, pibotRotation.y, pibotRotation.z);
    el.addEventListener('raycaster-intersection', function(evt){
      var e = new CustomEvent('intersection-detected', {detail: evt.detail});
      this.dispatchEvent(e);
    });
  }
});

1 Ответ

0 голосов
/ 30 августа 2018

Как насчет пользовательского компонента, подобного этому:
- raycaster-intersected события пожаров - вы храните raycaster
- raycaster-intersected-cleared - вы отменяете ссылку на Raycaster
- на tick, если существует ссылка на raycaster, получить точку пересечения и выполнить вычисления.

AFRAME.registerComponent("foo", {
  init: function() {
    this.el.addEventListener("raycaster-intersected", evt => {
      this.intersectingRaycaster = evt.detail.el.components.raycaster;
    });
    this.el.addEventListener("raycaster-intersected-cleared", () => {
      this.intersectingRaycaster = null;
    });
  },
  tick: function() {
     if (!this.intersectingRaycaster) {
        return;
     }

     const intersection = this.intersectingRaycaster.getIntersection(this.el);
     if (intersection) {
        let point = intersection.point;
        // your calculations
     }
  }
});

Проверьте это в этой скрипке .

...