[程式] 字串ID (String ID, SID)
String ID (SID)是開發遊戲常用到的工具
主要是當作在遊戲中存取素材(asset look-up)的鑰值(key)
基本上就是把字串用雜湊值取代
最近開始計畫撰寫遊戲程式系列文
對SID的需求迅速演變成一個獨立專案...
https://github.com/TheAllenChou/string-id
主要的好處有:
- 每個SID使用的記憶體量是固定的(取決於雜湊值的型別)
- SID之間的比較是constnat-time
- 一般用SID當作存取素材的key比用字串當key有效率
- SID若實作成編譯時期常數,則可以用作switch case,字串則不行
- 動態將SID串接字串生成新的SID是linear-time,且不需要原SID之對應字串
主要的壞處與解決方式:
- SID較難除錯,因為其本質是雜湊值
一般的做法是另外做個資料庫,儲存SID與對應字串的對照表
然後再做個debugger外掛,讓watch window顯示對應字串
有了這些應變措施之後,SID除錯起來就跟一般字串沒兩樣
- 因為SID是雜湊值,會有兩個字串產生相同SID的可能性(雜湊碰撞, hash collision)
遇到這種狀況,要嘛額外實作解決雜湊碰撞的機制,要嘛改變其中一個字串
雜湊函示選擇恰當和運氣好的話,雜湊碰撞的機率不高
(公司十年來還沒碰過SID雜湊碰撞,所以一直還沒有實作解決方式XD)
我的SID專案進度是已經有可以實用的SID
但是還在開發除錯用的資料庫和debugger plugin
開始撰寫遊戲程式系列文的預訂日無限推延中...
--
Web http://AllenChou.net
Twitter http://twitter.com/TheAllenChou
LinkedIn http://linkedin.com/in/MingLunChou
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 23.242.26.50
※ 文章網址: https://www.ptt.cc/bbs/GameDesign/M.1472430955.A.74E.html
推
08/29 09:31, , 1F
08/29 09:31, 1F
→
08/29 09:31, , 2F
08/29 09:31, 2F
→
08/29 10:28, , 3F
08/29 10:28, 3F
→
08/29 12:32, , 4F
08/29 12:32, 4F
→
08/29 21:45, , 5F
08/29 21:45, 5F
→
08/29 21:45, , 6F
08/29 21:45, 6F
→
08/29 23:17, , 7F
08/29 23:17, 7F
→
08/29 23:18, , 8F
08/29 23:18, 8F
→
08/29 23:19, , 9F
08/29 23:19, 9F
→
08/29 23:26, , 10F
08/29 23:26, 10F
→
08/30 02:50, , 11F
08/30 02:50, 11F
→
08/30 02:51, , 12F
08/30 02:51, 12F
→
08/30 02:51, , 13F
08/30 02:51, 13F
→
08/30 07:23, , 14F
08/30 07:23, 14F
→
08/30 07:23, , 15F
08/30 07:23, 15F
→
08/30 08:39, , 16F
08/30 08:39, 16F
推
09/05 13:41, , 17F
09/05 13:41, 17F
→
09/05 13:42, , 18F
09/05 13:42, 18F
→
09/05 16:43, , 19F
09/05 16:43, 19F
→
09/08 19:36, , 20F
09/08 19:36, 20F
→
09/08 20:53, , 21F
09/08 20:53, 21F
→
09/09 06:51, , 22F
09/09 06:51, 22F
→
09/09 06:52, , 23F
09/09 06:52, 23F
※ 編輯: cjcat2266 (160.33.43.15), 09/09/2016 06:59:32
→
09/09 07:00, , 24F
09/09 07:00, 24F
→
09/09 07:07, , 25F
09/09 07:07, 25F
→
09/09 07:08, , 26F
09/09 07:08, 26F
→
09/09 07:09, , 27F
09/09 07:09, 27F
→
09/09 07:10, , 28F
09/09 07:10, 28F
→
09/09 13:42, , 29F
09/09 13:42, 29F
→
09/10 00:04, , 30F
09/10 00:04, 30F
→
09/10 00:05, , 31F
09/10 00:05, 31F
→
09/10 00:06, , 32F
09/10 00:06, 32F
→
09/10 00:07, , 33F
09/10 00:07, 33F
→
09/10 00:10, , 34F
09/10 00:10, 34F
→
09/10 00:11, , 35F
09/10 00:11, 35F
→
09/10 00:11, , 36F
09/10 00:11, 36F
→
09/10 00:20, , 37F
09/10 00:20, 37F
→
09/10 00:21, , 38F
09/10 00:21, 38F
→
09/10 00:22, , 39F
09/10 00:22, 39F
→
09/10 00:25, , 40F
09/10 00:25, 40F
→
09/10 00:27, , 41F
09/10 00:27, 41F
→
09/10 00:42, , 42F
09/10 00:42, 42F
→
09/10 00:43, , 43F
09/10 00:43, 43F
→
09/10 00:43, , 44F
09/10 00:43, 44F
推
09/10 02:26, , 45F
09/10 02:26, 45F
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):