【问题标题】:Store pattern for game state in angular以角度存储游戏状态的模式
【发布时间】:2021-08-08 07:57:24
【问题描述】:

我正在开发一个使用 Angular 构建的网络游戏,使用 WebSockets 与后端通信。到目前为止,我已经决定客户端根据需要发送“事件”,而服务器每秒发送 10 次左右的“状态”。

在客户端,这是由组件可以使用的 ConnectionService 处理的。该服务公开了一个“sendEvent”方法和一个以 10hz 左右更新的 gameState 对象。

这已经很好地工作了 - 但是随着来自服务器的状态树的增长,我想知道如何以可扩展的方式处理这些数据。以下是我希望能够解决的一些问题/用例:

  1. 不要每秒重新渲染所有内容 10 次。目前我做了一个天真的“this.gameState = newState”。我可能可以对键进行深度迭代并改变状态?这样做明智吗?

  2. 更容易说“当 gameState.pilot.switches[5] 发生变化时,做 X”。我希望能够听到状态变化的一个子集。

这里需要 rxjs 吗?

【问题讨论】:

    标签: angular rxjs state store


    【解决方案1】:

    只要您对它感到满意,Rxjs 可能是一个非常好的实用程序。 Rx 中一个非常简单的 store

    const store=new BehaviorSubject({gameState:{planeSpeed:0}})
    

    监听想要的状态

    store.asObservable().pipe(pluck('gameState','planeSpeed'),distinctUntilChanged())
    

    更新状态

    store.next({....store.value, {gameState:{planeSpeed:13}}})
    

    【讨论】:

    • NgRx 也可以用于同样的目的吗?
    • 是的,但我个人不喜欢写reducer。
    猜你喜欢
    • 1970-01-01
    • 2011-03-22
    • 2015-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多