1

我想在我的架构中有两个自定义属性,如果它们没有定义,或者它们的值低于 0.0,则它们有一个备用值

这是架构:

schema: {
  url: { type: 'string'},
  key: { type: 'string'},
  intensity: {
    // default is -100 to trigger fallback
    default: -100, 
    parse: function (value) { 
      if (value >= 0.0) { 
        return value 
      } 
      return -100
    } 
  }
}

给我带来问题的属性是强度属性。如果在 a-entity中定义

<a-entity io3d-data3d="key: mykey; lightMapIntensity: 1.0" shadow="receive: true"></a-entity>

该值已被组件正确使用,但是当我打开 a-frame 3d 编辑器并单击实体时 - 我收到此错误:

A帧错误

如果未在 中设置属性,则不会发生这种情况a-entity

使用自定义属性时我做错了吗?有没有办法定义具有 undefined 或 null 作为默认值的可选属性?

自定义属性类型:

https://aframe.io/docs/0.6.0/core/component.html#custom-property-type

4

2 回答 2

3

toFixed(decimalPlaces)a-frame 检查器尝试使用该函数对值进行四舍五入。

组件中传递的值是字符串,据我所知,toFixed()它不适用于字符串,至少在我的实验中和文档中都没有。

一个简单的解决方案是返回一个解析的值:

if (value >= 0.0) {
  return parseFloat(value);
}

尽管在将字符串与浮点数进行比较时,它会进行一些额外的解析,但您可能希望在检查之前解析值:

value = parseFloat(value);
if (value >= 0.0) {
  return value);    
}
于 2017-07-24T15:18:27.167 回答
0

好的,所以我注意到我的架构试图将我的属性解析为字符串。我想这是后备,如果你不定义类型?

lightMapIntensity: {
  // default is -100 to trigger fallback to value specified in data3d file
  type:'float',
  default:-100.0,
  parse: function (value) {
    if (parseFloat(value) >= 0.0) {
      return parseFloat(value)
    }
    return -100.0 // = fallback to value from data3d file
  }
}

至少我不再有错误了。

也许有人有更好的答案。

于 2017-07-24T14:59:35.530 回答