以角度存储游戏状态的模式



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

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

这运行得相当好,但随着服务器的状态树的增长,我想知道如何以可扩展的方式处理这些数据。以下是我希望能够解决的一些问题/用例:

  1. 不要每秒重新发送所有内容10次。目前我做了一个天真的";this.gameState=newState;。我可能可以对键进行深度迭代,然后改变状态?这明智吗?

  2. 让它更容易说";当gameState.pilot.switches[5]改变时,执行X〃;。我希望能够听到状态变化的子集。

这里需要rxjs吗?

Rxjs可以是一个非常好的实用程序,只要你对此感到满意。Rx 中的一个非常简单的存储

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

监听所需状态

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

更新状态

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

最新更新