在AFrame中即时添加新实体

时间:2016-12-26 22:26:43

标签: dom aframe webvr

我正在尝试构建一个AFrame应用,用户可以点击某个内容并显示新的场景。从那里,用户可以点击其他内容等。该场景的数据来自API,因此很难知道用户可能遇到的所有场景。

考虑到这一点,您将如何在运行时修改AFrame场景?显然修改DOM并不起作用,但如果有办法让AFrame在某个时间重新渲染场景,那就太棒了。如果您认为有另一种方法可以解决这个问题,我很乐意听到它。谢谢!

2 个答案:

答案 0 :(得分:6)

只是为了将来参考,因为您已经解决了问题,您可以使用普通的JS DOM API:

var el = document.createElement('a-entity');
document.querySelector('a-scene').appendChild(el);

答案 1 :(得分:4)

您确实可以在运行时修改DOM,它会影响场景。以下是使用从this project获取的jQuery添加新对象的示例:

function appendObject(id, file, scale, position, rotation, scale) {
        $('<a-obj-model />', {
          id: id,
          class: 'city object children',
          position: position,  // doesn't seem to do anything, known issue
          scale: scale,
          rotation: rotation,
          file: file,
          src: '#' + file + '-obj',
          mtl: '#' + file + '-mtl',
          appendTo : $('#city')
        });
       document.getElementById(id).setAttribute("position", position); // this does set position as a workaround
      }

以下是删除对象的示例:

 onMenuDown: function () {
        previousObject = document.querySelector("#object" + (objectCount - 1));
        previousObject.parentNode.removeChild(previousObject);
        objectCount -= 1;
        if(objectCount == -1) {objectCount = 0};
  },