【问题标题】:Can aframe-state-component track state across scenes?aframe-state-component 可以跨场景跟踪状态吗?
【发布时间】:2018-05-30 16:35:35
【问题描述】:

我有一个(基于 Angular 5)的 a-frame 应用程序,它有两个场景。我想使用aframe-state-component 组件跟踪应用程序状态,例如配置参数。我想访问两个场景的累积状态。但是,根据经验,似乎每次我切换到另一个场景时,状态中的所有变量都会重置为初始状态。

此外,您可以使用如下语句访问状态变量:

AFRAME.scenes[0].systems.state.state.score

向我建议该状态仅与一个场景相关联(场景 [0] 等于当前场景)。

起初我认为这是一个角度问题,因为我初始化状态的假定单例服务在每次场景传输时都被初始化。但我发现使用角度路由器进行链接:

this.router.navigate([(evt.target as any).previousSibling.getAttribute('link').href, {}])

代替默认:

window.location = this.data.href

解决了这个问题。所以现在看来​​是 A-frame 的问题。

这个组件只能用于场景内而不是场景间的概念是正确的假设吗?

注意:我也在尝试使用angular-redux/store,它似乎在跨场景保留状态时没有问题,但我宁愿使用 aframe-state-component,因为它看起来更简单。

【问题讨论】:

    标签: aframe


    【解决方案1】:

    您可以存储在 localStorage 中并在加载时恢复。比如:

    window.addEventListener('beforeunload', () => {
      localStorage.setItem('state', JSON.parse(state));
    });
    
    initialState: localStorage.getItem('state') 
      ? JSON.parse(localStorage.getItem('state'))
      : {
      // Initial state...
    }
    

    编辑:意识到您的意思是应用内场景更改?你可以做类似的事情。当一个场景被卸载时,将它存储在某个地方,然后状态组件检查它是否存在?

    【讨论】:

      【解决方案2】:

      状态组件似乎没有存储状态,所以如果您在一页上有两个场景,它会起作用:

      <a-scene></a-scene> 
      <a-scene visible="false"></a-scene>
      

      并通过设置visible 属性来切换它们。我还表明AFRAME.scenes 指的是页面上的场景,因为您可以在上面的“示例”(或this fiddle)中记录AFRAME.scenes[0]AFRAME.scenes[1]

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-05
        • 1970-01-01
        • 2022-07-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多