控制框架中的光实体

controlling light entity in a-frame

我在 A-Frame 中使用了一些实体,但似乎无法正确控制颜色(即强度)。我可以访问并设置值 一次 但在那之后,它被锁定并且不会响应任何修改。有一些明显的解决方案吗?

我的应用是拥有一组聚光灯,当您在虚拟环境中经过它们时,它们的强度会主动增减。

更新: 我通过定义一组聚光灯和一些变量来开始我的 A-Frame 脚本:

<a-light type="spot" angle="21" color="#BBB" position="33.1 -17 39" target="#Pic01" id="Spot01"></a-light>  
<a-light type="spot" angle="21" color="#BBB" position="38.1 -17 39" target="#Pic02" id="Spot02"></a-light>
<a-light type="spot" angle="21" color="#BBB" position="43.1 -17 39" target="#Pic03" id="Spot03"></a-light>
<a-light type="spot" angle="21" color="#BBB" position="48.1 -17 39" target="#Pic04" id="Spot04"></a-light>
...  
<script> 
  var SpotA=document.querySelector('#Spot01');  
  var SpotB=document.querySelector('#Spot02');  
  var SpotC=document.querySelector('#Spot03');  
  var SpotD=document.querySelector('#Spot04');  
  ...  
</script>  
Later in the code in a script block, I would use:
<script>  
  ...  
  SpotA.object3D.children[0].color.r=xxx;  (some decimal value)  
  SpotA.object3D.children[0].color.g=xxx;  (some decimal value)  
  SpotA.object3D.children[0].color.b=xxx;  (some decimal value)  

这通常会奏效,但有时会发生某种情况,光锥会完全变黑,虽然您可以设置甚至读回这些值,但无法恢复对光的控制。如果我尝试使用十六进制值(例如#3AA)设置颜色并且有时随机使用单个 rgb 组件,则总是会发生这种情况。

如果我从控制台手动查询 SpotA,它 returns:

'< a-light type="spot" angle="21" color="#B0B0B0" position="33.1 -17 39" target="#Pic01" id="Spot01" light="">

... 这完全符合我的预期 - 所有元素都存在并且可以从控制台访问。但是请注意,不能使用 javascript 语句设置颜色属性。并且-

SpotA.object3D.children[0].color.r= (some value)

...什么都不做,光锥保持黑色。无论是用代码还是手动完成,结果都是一致的。令人沮丧。

现在,如果我查询任何组件的值,它 return 是我正确设置的值,但光线将被锁定,只产生一个黑色锥体。最终只会return"undefined".

SpotA.object3D.children[0].color.r=0.73333; (enter)
<. 0.73333
SpotA.object3D.children[0].color.r (enter)
<. undefined

有什么想法吗?有些东西似乎坏了,或者我可能错误地访问了这些值。但是文档中没有任何内容可以指导我;我必须查看元素并选择有效的元素。

修改DOM 属性。不要直接访问children(光不保证是第一个children,访问时没有初始化...)例如:

SpotA.setAttribute('color', 'red');

您可以使用以下任何一种颜色格式:

rgb(250, 0,0)
rgb(100%,0%,0%)
hsl(0, 100%, 50%)
#ff0000
#f00
red