Как правильно сделать бассейн с 10S-рамка - PullRequest
0 голосов
/ 16 июня 2019

Задача: создать 10 сферных объектов, поместить их в бассейн;при каждом нажатии получал каждую сферу из пула и показывал ее пользователю в точке пересечения курсора.

Проблема: не могу понять, как правильно создать и после этого поместить ее в пул.Пожалуйста, проверьте код ниже.

Currently each sphere create dynamicly like this: (in a-scene on click event)

    let {x, y, z} = event.detail.intersection.point
      sceneEl.insertAdjacentHTML('beforeend',
            `<a-sphere data-coords="[${x}, ${y}, ${z}]"  data-clickable position="${x} ${y} ${z}" radius="32.0" color="#eee"></a-sphere>`)
need in further work to get each a-sphere object from pool.

Layout:
<a-scene id="scene"  pool__sphere="mixin: sphere; size: 10"  main-scene class="ascene" cursor="rayOrigin: mouse" raycaster="zobjects: a-sky">

  ....
      <!-- Asset-s from them want to create each a-sphere -->  

            <a-assets>
                  <a-mixin id="gray" color="#eee"  ></a-mixin>
                    <a-mixin id="radius" radius="32.0"  ></a-mixin>
                    <a-mixin id="sphere" geometry="primitive: sphere"></a-mixin>
            </a-assets>

Создание пула:

AFRAME.registerComponent('main-scene', {
    init() {
        //here maybe needed to create each a-sphere object
        //end add each to pool, 
        //then on each scene click, needed to get one by one sphere from pool

        //pool creation
        let sceneEl = this.el        
         var el = sceneEl.components
         sceneEl.play(); 

         //pool logs 10 empty objects {} if      console.log('pool with spheres', el.pool__sphere)


         el.pool__sphere.returnEntity(el);
         console.log('entity', el)
    },
    //     console.log('el', el)

    play (){
    }
})

Может быть, это я, но не понял, как именно это сделать Нет четкого примера для obj.создание в док.только для получения объекта из пула смотрите: https://github.com/aframevr/aframe/blob/master/docs/components/pool.md

1 Ответ

0 голосов
/ 17 июня 2019

Я не уверен, что вопрос касается <a-sphere> пулов или создания объектов перед их пулированием, поэтому:

1) Вам не нужно вручную создавать объекты, которые должны быть объединены.
2) «Шаблон» для объединенных объектов определяется атрибутом mixin. Любой компонент (геометрия, материал, модели, пользовательские) должен быть определен в данном миксине.

Исходный код здесь . Итак, с простым объявлением:

<a-scene pool__spheres='mixin: ball; size: 10'>
  <a-assets>
    <a-mixin id="ball" geometry='primitive: sphere' material="color: red">
  </a-mixin>

компонент пула уже создаст 10 <a-entity> s, все с использованием #ball mixin.


Вам нужно всего лишь получить объекты из пула при нажатии:

this.el.addEventListener('click', e => {
   let pool = this.el.sceneEl.components["pool__spheres"]
   let sphere = pool.requestEntity();
});

и вернуть их в пул в какой-то момент:

let pool = this.el.sceneEl.components["pool__spheres"]
pool.returnEntity(this.el)

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

...