我爲我正在開發的遊戲創建了一個SVG生成的地圖。我對開源遊戲並沒有任何問題,它使用了開放的網絡技術,如HTML和SVG。那裏沒有問題。隱藏來自SVG的重要數據
但是同時我希望玩家不能看到或逆向工程全世界的地圖(保留真正的探索)。現在我使用一個祕密而不受版本控制的種子生成地圖。因此,即使算法已知,好奇的玩家可以使用開源代碼來生成「遊戲般的世界」,但不是那麼確切。這解決了「全球」問題。
但是,由於SVG在頁面上呈現爲單個Voronoi圖,所有數據(我不介意點的座標)都是可提取的。可以從SVG獲取資源,土地類型,生物羣落,氣候等數據,以便爲定居點找到好的位置。
任何想法如何防止?玩家視力有限,所以我想到了:
- 根本沒有渲染整個Voronoi圖(只是可見的部分),但這可能會很棘手(可能還沒有看過它) ,
- 資源/土地瓦片數據到SVG圖形插入僅可見位置
我可以看到這兩種方法的好處,如果做得正確,甚至有可能提升性能(不渲染整個事情/渲染用更少的數據)並導致更大的世界而不影響性能。
任何其他想法/編程/體系結構方法來解決這個問題?
(我用Vue.js,d3.js,SVG-平移變焦和Laravel後端以防萬一它有助於。)
聽起來好像你只是在遊戲世界中基於用戶當前座標進行部分渲染。在3D遊戲編程中,我們經常使用稱爲四叉樹的技術進行部分渲染,也許您可以在這裏做類似的事情?您可以存儲世界的最小參數,例如其最大x/y值,以便您可以將玩家當前位置映射到樹中,然後根據樹中當前位置渲染到畫布。 – Alex
除了我的第一條評論之外,如果您不希望所有資產一次性下載到客戶端,則可以進行某種漸進式渲染......隨着用戶遍歷世界(並且變得更深或更高在樹中),那麼你可以開始逐步提供這些資產來更新你的畫布。這也會減少你的初始加載時間,但要注意,如果玩家的連接速度很慢,它也會有缺點 - 這一定是瓶頸,但它肯定有可能 – Alex
@Alex我設法實現它,通過數學找到兩個當前voronoi cell用戶的高級深度鄰居只能在屏幕上渲染並且只能渲染屏幕上的那些(這也改善了性能)。我將它們從用戶身上隱藏起來,並在玩家周圍放置了一個圓形渲染區域以創建一個「視域」。漸進式渲染也是一種很好的方式,因爲遊戲節奏非常緩慢,旅行在現實生活中需要花費幾個小時甚至幾天的時間。沒有人有Internet緩慢。 :)這是一個偉大的妥協。對不起,很長的回覆,但如果你可以重新格式化你的評論作爲答案,我會接受它。 –