Есть ли способ запустить цикл tick () на объекте A-Frame в пуле, или я должен управлять этим вручную? - PullRequest
0 голосов
/ 03 мая 2019

Я использую A-Frame и пытаюсь сгенерировать пул из нескольких «облачных» сущностей, которые будут медленно начинать движение в определенном направлении после активации, но функция tick(), похоже, не вызывается!Есть ли способ запустить его или мне нужно управлять им вручную?

Вот настройки, которые я использую для тестирования с 1 облаком:

HTML

<a-assets>
    <a-mixin id="cloud" cloud></a-mixin>
</a-assets>

<a-entity 
    cloudmanager
    pool="mixin: cloud; size: 1;">
</a-entity>

cloudmanager.js

AFRAME.registerComponent("cloudmanager", {
    init: function(){
        const cloudEl = this.el.components.pool.requestEntity();
        cloudEl.components.cloud.startMoving();
    }
});

cloud.js

AFRAME.registerComponent("cloud", {

    //LIFECYCLE
    //-----------
    init: function(){
        this.startMoving = this.startMoving.bind(this);
        this.moving      = false;
       // ...and then create the cloud geometry etc etc
    },
    tick: function(time, deltaTime){
        console.log("tick"); //never happens!

        if(this.moving) this.move(deltaTime);
    },

    //UTILS
    //-----------
    startMoving: function(){
        console.log("starting to move!"); //logs ok
        this.moving = true;
    },
    move: function(deltaTime){
       // translations etc etc
    }
});

Облако создается нормально(подтверждается ведением журнала и появляется в сцене), ему говорят, что он должен начать двигаться нормально (подтверждается ведением журнала), но console.log внутри tick() просто никогда не срабатывает, и поэтому я не могу заставить облако двигаться!

Правильно ли я использую бассейн?Или это просто оптимизация, чтобы объединенные сущности не тикали, даже если они не используются?Нужно ли активировать их каким-либо образом?

Любая помощь будет принята с благодарностью!Спасибо всем.

-p

1 Ответ

1 голос
/ 03 мая 2019

Вы можете попробовать переместить компонент менеджера для инициализации после инициализации пула:

<a-entity 
  pool="mixin: cloud; size: 1;"
  cloudmanager>
</a-entity>

И он должен работать.Проверьте это в этой скрипке.


Компонент пула вызовет play и pause при запросе и возврате сущностей.Когда запрашивается элемент, функция tick должна вызываться в каждом кадре.
...