1

我正在框架中注册一个由其他基元组成的基元。但我想独立地缩放和定位这些内部基元。但是由于位置本身是一个组件,这些内部基元没有位置,因此我无法移动它们。

如何在作为我要注册的原语的一部分的原语的组件上设置值?

AFRAME.registerPrimitive('a-svrbutton', {
  defaultComponents: {
    geometry: {
      primitive: 'box',
      height: 1.5,
      depth: 0.2,
      width: 3.5
    },
    material: {
      opacity: 1.0,
      transparent: true,
      side: 'Double',
      color: '#8450ff'
    },
    position: {
      x: 0,
      y: 0,
      z: -5
    },
    'bmfont-text': {
      text: 'hola',
      color: '#ffffff'
    },

  },
  mappings: {
    height: 'geometry.height',
    width: 'geometry.width',
    depth: 'geometry.depth',
    color: 'material.color',
    opacity: 'material.opacity',
    position: 'position'
  }
});
<script src="https://aframe.io/releases/0.5.0/aframe.min.js"></script>

<a-scene>
  <a-svrbutton id="mybutton" position="0 0 -5"></a-svrbutton>
</a-scene>

确保您的浏览器支持 WebVR 以运行上面的代码片段。

我想将默认“组件”bmfont-text 中的默认位置定义为任意 xy 和 z。但我不能,因为这个“原始”本身没有位置组件。我怎样才能做到这一点?

4

2 回答 2

2

原语通常是一个或多个组件的简写,不是其他原语,所以我可能会误解你在做什么——如果是这样,你可以在你的问题中添加示例代码吗?

您通常可以将不相关的组件添加到原语中就好了,即使原语还没有该组件:

<a-text text="Hello World;" position="0 0 -5"></a-text>

如果这不起作用,我建议使用 bmfont 作为组件而不是<a-text />原始版本。

<a-entity bmfont-text="text: Hello World;" position="0 0 -5"></a-entity>

从 A-Frame v0.3.0 开始,原语存在一些错误,因此组件和 mixin 可能更可靠。

于 2016-09-16T13:58:28.807 回答
1

一种方法是使它们成为两个独立的实体。

<a-entity>
  <a-srvbutton></a-srvbutton>
  <a-text></a-text>
</a-entity>

或者也许制作一个包装器组件来包装 bmfont 文本?

AFRAME.registerComponent('bmfont-text-wrapper', {
  schema: {
    textPosition: {type: 'vec3'},
    text: {type: 'string'}
  },

  init: function () {
    var text = document.createElement('a-entity');
    text.setAttribute('bmfont-text', this.data.text);
    text.setAttribute('position', this.data.textPosition);
    this.el.appendChild(text);
  }
});

然后添加映射。

于 2016-09-16T22:39:24.130 回答