2010-09-28 85 views
1

我可以看到這可能不是一個足夠好的問題,但我已經開始構建第一個體面的遊戲引擎HTML5 canvas這是跨瀏覽器,最重要的是快速。唯一的問題是我對遊戲設計非常陌生,不知道很多技巧會幫助我。2D遊戲設計和優化提示和技巧

我目前正在執行的遊戲引擎將被取出的遊戲是一個基於2D的成熟平鋪貼圖(約3500)。我將從我迄今爲止學到的一些技巧開始。

  • 重繪區域 - 只重繪改變
  • 避免不必要的函數調用的區域(Firefox不喜歡太多了)
  • 使用DOM,如果你能
  • 大塊瓷磚一起更快地訪問

我正在尋找的其他東西是地形生成,二維照明,地圖,快速服務器通信等。如果這太模糊,我會嘗試關閉它。只是想更好地瞭解遊戲設計。

鏈接/資源會很好。尤其是物理或重要的數學。

+0

不認爲你可以重繪區域,如果你想在畫布上滾動......這一直是我的遊戲編程經驗100%,不是說過去有過的問題。瀏覽器是一個完全不同的故事。是的,我真的沒有什麼價值可以在這裏提供。您可以使用kd-tree更快地查詢「單位」。 – mpen 2010-09-28 01:31:08

+0

是的,這是真的。雖然在我的實現中,當玩家達到屏幕的四分之一時發生滾動。玩家移動和世界滾動的混合。 – Louis 2010-09-28 01:36:39

+0

「地形生成,照明在2D,地圖,快速的服務器通信[...]物理或數學的重要」 ......這些是巨大的話題,並從遊戲中變化很大,完全沒有標準或規則來遊戲。你要麼需要更具體的在每種情況下,或者你需要去購買一些遊戲編程的書籍,並通過他們閱讀。無論哪種方式,我建議www.gamedev.net/community/forums或gamedev.stackexchange.com更適合於比這裏特定遊戲的問題。 – Kylotan 2010-09-28 11:28:12

回答

4

只繪製可見的東西,這意味着只繪製當前屏幕上的瓷磚等。對於相當容易的貼圖,如果您有很多實體,您可能要使用滑動窗口來保存屏幕本地對象列表或使用像四叉樹這樣的東西。

由於沒有簡單/快速的方法將一個畫布複製到另一個畫布,所以重繪區域非常複雜,因爲如果背景沒有改變,您就無法保持(例如)背景的緩衝狀態。因此,保留「髒矩形」列表肯定會成爲計算開銷。

整個主題是非常廣闊,甚至處理FPS率是相當困難的,這個問題包含有關該主題的一些很好的鏈接和答案:
https://gamedev.stackexchange.com/questions/1589/fixed-time-step-vs-variable-time-step

你也提到了服務器的通信,如果你想做一些多人遊戲,你將不得不關心更多的東西,你不能信任客戶端,需要擔心帶寬,同步問題,客戶端插值等。

我已經做了一些過去相當簡單的2D遊戲,其中大部分都不在JavaScript中,但它們都是d給你一些提示:
http://github.com/BonsaiDen/Norum
(在C平臺遊戲引擎演示,相機帶,移動平臺)

http://github.com/BonsaiDen/Tuff
(2D平臺遊戲在Java中,得到了從未完成,通電和一些很酷的東西)

http://github.com/BonsaiDen/NodeGame-Shooter
(2D多人太空射擊遊戲寫在JS,如何使用Node.js服務器的WebSockets和通信)

對於一些最後的話我會說英語新應該從小開始,比如先做一個滾動的瓷磚地圖,然後添加一個播放器,然後重寫整個事物。你想寫出完美的引擎只是從頭開始,直到找出所有的怪癖和技巧,它需要許多迭代。

如果你想你應該打開你遇到了麻煩與單一成分的問題更準確的答案。