2012-12-07 56 views
3

我正在寫一個JavaScript網頁遊戲,它具有類似於一個Urban Dead用途的3 x 3視口。 「世界地圖」存儲爲100 x 100二維數組服務器端(nodejs),每對座標定義一個「房間」。因此,3 x 3視口顯示了9個房間的名稱和內容。更新客戶端Javascript遊戲視口

用戶的位置作爲座標存儲在服務器端。例如。 Bob = { x : 2, y : 3 }。所以Bob的x座標是Bob.x。客戶端(瀏覽器)可以檢索這個並計算其他8個房間的座標,並向服務器請求這些房間的內容。這些然後顯示在視口中。這假設看起來像Urban Dead中的視口(左上角)。

問題

我應該如何去想使得視「刷新」或更新?我想這樣做...

1)當玩家從座標(2,3)移動到(1,3)。客戶再次詢問服務器9個房間的內容並重新繪製/顯示所有內容。

2)當的客房的變化之一的內容,所述服務器(的NodeJS)運行的客戶端側功能告訴它向服務器請求的9個室和重新繪製內容/顯示一切。

作爲編程新手,我想知道這個實現過於幼稚或效率低下嗎?

回答

1

前一個選項將是最好的imo,純粹是因爲您的地圖展開後,您將更容易設置觸發區域,從而導致客戶端加載地圖的特定區域。您甚至可以只加載他們可以看到或有權訪問的房間。

例如,如果您有多個字符,這也是有好處的。想象一下,你在一個地方有你的主角,而在其他地方有一個副角色。客戶知道他們的位置並理解每個角色可以看到的內容並僅從服務器請求這些信息會更好。這是一個更加可擴展的解決方案,而不是讓服務器不斷向所有正在收聽的人播放所有房間信息。

關於房間內容的變化,這可能會被標記爲從服務器到所有客戶端的事件 - 但完全基於房間座標和最小數據。如果此事件涵蓋了客戶當前可以看到的其中一個房間,那麼該客戶可能會請求該房間信息。所以這部分涉及到你的選擇二,但不應該廣播太多。

作爲一個比喻,這更類似於讓客戶/用戶在他們想要的時間只從網站請求他們想要的資源,並且可能註冊郵件提醒他們對他們感興趣的內容。而不是讓用戶註冊RSS提要,並在網站發生任何變化時收到通知。前者更爲優化,可以通過特定的方式進行控制,如果用戶有興趣瀏覽網站的全部內容(通常情況下不適用於遊戲 - 除非您設計的機器人具有以作弊)。總體而言,在通過實施這兩種方法的一部分來談論它之後,這將是有用的。但如果這是一個選擇,第一個會給你更多的控制權。

+0

感謝您的漫長解釋。 +1並接受。 – Legendre

1

我不擔心太天真或效率低下的解決方案。困難的部分是讓遊戲可玩性和樂趣 - 後期優化。

看一下這個例子,傳輸的數據量看起來不是很大。你應該能夠獲取完整的9套房間進行更新。

你是否正在從服務器以間隔(輪詢)方式提取數據,或者你是否推動了從服務器到客戶端的更改?

+0

感謝您的幫助。 +1 – Legendre

1

問題是你關心AFK被通知,以及關於隔壁房間的信息有多重要。

如果您認爲一個策略可以改變,如果一個房間更新?在這種情況下,每次更新完成時都會進行更新。

如果一個玩家不在乎,那麼當傳遞到下一個房間時就完成了改變。

一種中間解決方案是根據遊戲每10或30秒詢問一次「增量」更新(只是修改過的元素)。在這種情況下,我們的中央時鐘可能很有趣(多個玩家將同時更新),並且這會創建一個轉身式的遊戲。

作爲RPG玩家(紙本角色扮演遊戲),我會認爲第三個是一個好方法。您甚至可以混合使用解決方案:當前房間的短時間更新和基於感知的時間(只有在重大活動時,金光閃閃纔會更新室外空間)。

+0

感謝您的意見。 +1 – Legendre