Rec-Room
您如何將多個數字打包到 Rec Room 電路中的單個統計數據中?
因為 Rec Room 只為我們提供了 6 個玩家統計數據和 3 個排行榜統計數據,所以我沒有足夠的統計數據來儲存我想要儲存的所有數據。我的遊戲中的玩家有多個我想要管理的值,為了實際儲存它們,我知道我需要將它們打包到一個統計數據中。
做這個的最好方式是什麼?理想情況下,我希望它是一個便宜的解決方案,仍然可以儲存大量資訊。
有幾種方法可以做到這一點,具體取決於它們將花費多少墨水、您使用的約束類型以及您嘗試打包的統計數據數量。以下解決方案實現了最緊湊的打包和打包和解包的成本 (n-1)*2 個晶片,其中 n 是要儲存的值的數量。
假設您要儲存 4 個值:a、b、c 和 d。每個值都有以下範圍。你知道它們永遠不會大於或等於這個值。
a: [0, 30) b: [0, 13) c: [0, 25) d: [0, 3)
重要的是,此方法假設 a >= 0、b >= 0、c >= 0 和 d >= 0;負數將不起作用,因此您必須在打包之前應用偏移量,並在解包後移除該偏移量。
另一個需要檢查的重要事項是,將最大值相乘時,它們不會超過 (2^31)-1 的最大整數值。在我的範例中,結果為 29250,遠小於 (2^31)-1,因此它可以安全地儲存在玩家統計數據和排行榜統計數據中。
因此,要打包這些值,請遵循以下過程:
accumulator = 0 accumulator = accumulator * 30 + a // this could be simplified to just "accumulator = a" accumulator = accumulator * 13 + b accumulator = accumulator * 25 + c accumulator = accumulator * 3 + d
在 Rec Room 電路中,如下所示,可以在此處進行調查:
現在要解包,您必須執行相反的操作:
d = accumulator % 3; accumulator = accumulator / 3 c = accumulator % 25; accumulator = accumulator / 25 b = accumulator % 13; accumulator = accumulator / 13 a = accumulator % 30; accumulator = accumulator / 30 // can be simplified to "a = accumulator; accumulator = 0"
在 Rec Room 電路中,如下所示,可以在此處進行調查:
這是您可以實現的最嚴格的編碼,具有任意範圍的一些不錯的好處。