[wizs] /open/vroom
底下有三個檔案...
vroom_d.c 共通繼承檔
這個檔設定了玩家在移動到其它房間時會做的事
vroom.c 虛擬房間檔, 每個虛擬房間的本體都是 vroom.c
每個 vroom.c 都會有個 check_ppl 函數, 它會
在特定時間被 control.c 呼叫, 用以判斷虛擬
房間還有沒有玩家存在.
control.c 區域的起點, 有四個出口通往對映的虛擬房間,
它並定義了該方塊型區域的四個邊界值.
(以目前的 control 來說, 它是 31 x 31 的區域)
heart_beat 則是每一秒它會做的事, 其中有個全
域變數 f 會累加...
當 f/150 的餘數是 30 時, 對第一象限的所有虛擬房間做 check_ppl
當 f/150 的餘數是 60 時, 對第二象限的所有虛擬房間做 check_ppl
當 f/150 的餘數是 90 時, 對第三象限的所有虛擬房間做 check_ppl
當 f/150 的餘數是 120 時, 對第四象限的所有虛擬房間做 check_ppl
所以它可以定時去對所有的虛擬房間做 check_ppl,
只要該房間的 check 結果是沒有任何玩家存在, 它
就會把該虛擬房間從系統記憶體中 clean 掉。
在有設定邊界值以及一般合理的情況下,最多只會產生 31 x 31
個房間,而每過一個 check_ppl 的循環周期後,最多只會剩下
與「玩家在線人數」相同的房間數。
(即假設線上的玩家全部都跑去那個區域,而且每個人佔一格)
又假設,如果玩家每進一個房間,例如它就得停留一段時間才
能再往次一格走,亦或者每進一個房間就得跟房間的怪物戰鬥
(等於同樣要停留一段時間),那麼實際上就不可能一下子產生
許多房間。
甚至,我們可以先畫好一個依一定格式完成的地圖,把地圖讓
control.c 去處理,之後,它就會依照那份地圖,去 product
出整個虛擬房間組成的區域,這也是一種不錯的方式。
Laechan
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.225.184.184
推
12/28 23:21, , 1F
12/28 23:21, 1F
推
12/29 03:56, , 2F
12/29 03:56, 2F
→
12/29 03:56, , 3F
12/29 03:56, 3F
→
12/29 18:34, , 4F
12/29 18:34, 4F
→
12/29 18:35, , 5F
12/29 18:35, 5F
→
12/29 18:36, , 6F
12/29 18:36, 6F
→
12/29 18:36, , 7F
12/29 18:36, 7F
mud_sanc 近期熱門文章
PTT遊戲區 即時熱門文章
31
60
706
1406