【发布时间】:2017-08-08 07:10:04
【问题描述】:
假设我将这个原子作为游戏的状态:
(defonce state (atom {:player
{:cells [{:x 123 :y 456 :radius: 1.7 :area 10}
{:x 456 :y 789 :radius: 1.7 :area 10}
{...}]}}))
我想读取其中一个单元格的位置,(地图 :x 和 :y 值在 :cells 向量中)使用它们应该在下一帧中的值进行计算,然后在计算时更新新的: x 和 :y 在各自地图中的位置?
到目前为止我有这个:
(let [cells (get-in @state [:player :cells])]
(reduce
(fn
[seq cell]
(let [cell-x (get-in cell [:x])
cell-y (get-in cell [:y])]
; do my calculations
; ...
))
nil
cells))
所以我可以读取这些值并进行计算,但是如何使用新值更新 x 和 y 位置?我可以使用:
(swap! state update-in [:player :cells ...] assoc :x new-x :y new-y)
但是我不知道索引...在哪个向量中更新它。
我认为有一种方法可以不使用 reduce 来获得索引?
或者我是在接近这个完全不惯用的方法吗?
【问题讨论】:
-
你检查幽灵了吗?它对那种东西有很好的支持:github.com/nathanmarz/specter