Aframe不使用setAttribute()实时直接更新Aframe粒子系统组件的属性

Aframe不使用setAttribute()实时直接更新Aframe粒子系统组件的属性,aframe,webvr,Aframe,Webvr,我正在使用,并且在tick()函数上使用.setAttribute()来实时更新粒子系统,但它执行得非常糟糕,导致几乎与即时内存相关的崩溃。是否有办法直接访问系统的maxAge、opacity和enabled属性?我假设这是解决这个问题的最佳方法,因为框架建议出于性能原因直接访问.object3D。我希望能够以类似的方式访问粒子系统。非常感谢您的帮助。tldr:一个具有动画不透明度、大小和一些切换的示例。切换“最大年龄”似乎要等到所有当前粒子都消失了,尽管在报告中没有关于它的消息 1.破坏粒子系

我正在使用,并且在
tick()
函数上使用
.setAttribute()
来实时更新粒子系统,但它执行得非常糟糕,导致几乎与即时内存相关的崩溃。是否有办法直接访问系统的
maxAge
opacity
enabled
属性?我假设这是解决这个问题的最佳方法,因为框架建议出于性能原因直接访问
.object3D
。我希望能够以类似的方式访问粒子系统。非常感谢您的帮助。

tldr:一个具有动画不透明度、大小和一些切换的示例。切换“最大年龄”似乎要等到所有当前粒子都消失了,尽管在报告中没有关于它的消息

1.破坏粒子系统 粒子系统基于,所以modyfing不会是3.js'ish

据我所知,
粒子系统创建并存储
SPE.Emitter
。您可以在此处访问它们:

let particleSystem = this.el.component['particle-system']
let emitterGroup = particleSystem.particleGroup.emitters
更改值-例如,如果有一个发射器:

emitterGroup[0].disable()           // disables the emitter
emitterGroup[0].opacity.value = 0.1 // sets the opacity
2.A型架自定义构件的作业 我将创建一个自定义组件-一旦发生任何更改,它将遍历发射器组并更改属性:

AFRAME.registerComponent('particle-controller', {
   schema: {
      opacity: {default: 1}
   },
   init: function() {
      let system = this.el.components['particle-system']
      this.emitterGroup = system.particleGroup.emitters
   },
   update: function() {
      this.setValueInEmitters(this.emitterGroup, 'opacity', this.data.opacity)
   },
   // may come in handy when changing more key-value pairs
   setValueInEmitters(group, prop, value) {
     for (let i = 0; i < group.length; i++) {
        group[i].prop.value = value
     }
   }
}) 
a帧注册表组件('particle-controller'{
模式:{
不透明度:{默认值:1}
},
init:function(){
设系统=此.el.组件['particle-system']
this.emitterGroup=system.particleGroup.emitters
},
更新:函数(){
this.setValueInCommitters(this.emitterGroup'opacity',this.data.opacity)
},
//更改更多键值对时可能会很方便
setValueInEmitters(组、属性、值){
for(设i=0;i
模式可以提供键值对或类似的东西,以使组件更通用

3.为什么setAttribute这么重 从中收集,任何更改都会删除旧粒子组并从头创建新粒子组