2011-10-30 58 views
4

我想用HTML5開始開發一個「簡單」遊戲,我很困惑於我在網上找到的許多資源。我在開發過程中擁有堅實的背景,但在完全不同的環境中(具有諷刺意味的是,我開始編程是因爲我想成爲一名遊戲開發人員,而且這是我13年來從未做過的唯一事情......)。從HTML5開始遊戲開發 - 非常困惑

混淆來自這樣一個事實,儘管我非常瞭解JavaScript,並且我對HTML5有一些瞭解,但我無法弄清楚如何將所有這些新東西與我所瞭解的混合在一起。例如,這是我在想什麼:

  1. 該遊戲將是國際象棋的執行。我有一些簡單的「現成的」AI算法,我可以重複使用單人遊戲;這裏的目的是學習HTML5遊戲開發,所以這一部分目前並不是很重要。
  2. 我想圍繞遊戲構建一個網站。爲此,我會使用「常規」CMS,因爲我已經知道其中很多已經存在,並且放置起來會更快。
  3. 然後,我會擁有遊戲本身,在其「離線」版本中,與網站無關,因爲據我瞭解,它將獨自生活在一個頁面中。這是第一個問題:如何讓遊戲知道用戶的會話?登錄將由CMS處理(因爲用戶管理已經實施,所以這種方式應該更容易)。
  4. 作爲進一步的一步,我想將AI移動到服務器。這是第二個問題:我如何讓遊戲將玩家的操作發送給服務器,以及如何獲得答案?
  5. 後來,我想給遊戲帶來一個PVP元素,即一對一的多人遊戲(比如老式的象棋)。這是第三個問題:如何從客戶端向另一個客戶端發送信息,並保持對話繼續。爲此,人們建議我看一下Node.js,但是我還不知道如何「粘合」到其他部分。

    下面是PVP會話中單個動作的示例,這已經讓我很頭疼:玩家1將他的舉動發送到服務器(遊戲如何與Node.js對話?)。我需要確定遊戲ID(哪裏以及如何存儲它?),並確保玩家沒有手動修改它,所以它不會干擾別人的遊戲(怎麼樣?) 。

我知道整件事,就像我寫的那樣,非常混亂,但這正是我現在的感受。我無法弄清楚從哪裏開始,因此任何建議都非常受歡迎。

+1

這將是對http://gamedev.stackexchange.com ...... – Kzqai

+0

@Tchalvak更好:謝謝,我不知道一個呢。 – Diego

回答

2

太多的東西,可能是錯誤的順序。

很多的問題似乎並沒有我做的是在一審尤其涉及到HTML5。

開始具有明顯的事情 - 你想要一個單頁(基本上是JavaScript的應用程序)下棋,所以構建。如果你不能建立它,那麼剩下的就基本上是不相關的,如果你可以建立(而且我不懷疑你可以),那麼剩下的就是建立在這個能力上。

所以我們得到你的第一個問題 - 以及在上,你加載頁面,你將有會議,它的網頁,就像任何其他網頁的地步,所以這就是你如何獲取會話。如果你不在線,那麼你一直堅持從什麼時候開始在線,大概是本地存儲。

你想要的AI移動到服務器?好吧,確保前端用戶交互與「界面」對話以記錄播放器移動並檢索AI移動。鑑於這種分離,你可以使用ajax替代客戶端上的AI(儘管我希望x是json!)使用相同的參數調用服務器

這變得更好,如果你想要做球員你只是在談論通過服務器從一個用戶/玩家路由到另一個用戶/ player播放器 - 前端代碼沒有改變,只是什麼服務器在ajax調用的最遠端執行。

但是,對於所有這一切,退一步一步一步解決問題 - 如果你這樣做,你應該到達你想去的地方,而不要駕駛自己的堅果試圖擔心一桶充滿了可怕的問題您可以輕鬆地一次解決一個問題,並開始讓您的遊戲在瀏覽器中獨立運行。

+0

爲什麼選擇ajax?你想如何在ajax上製作多人遊戲?長期投票?然後處理重新連接?使用socket.io(僅用於消息傳遞)或dnode(用於真正的RPC),這會變得更容易。 – thejh

+0

感謝您相信我的技能(也就是說,如果您可以構建(我不懷疑您可以))。如果我真的可以,我不確定我自己,因爲我仍然必須決定從哪裏開始。關注遊戲頁面本身,現在我必須找到一個合適的文檔框架來開始 – Diego

+0

@thejh - 我的錯誤 - 通過使用一些任意的機制在客戶端和服務器之間進行通信,應該試着留下來說實話,這就是我曾經試圖提出的關於一步一步的建議 - 它是一個你可以並且應該獨立於其他問題的問題,如果它是我的工具包,我會在玩https://github.com/SignalR/SignalR是因爲我所做的是.NET( - :但其他人做的事情不同...... – Murph

1

關於問題一:你也許可以給用戶一個簽名的cookie。例如。創建一個包含他的用戶ID的cookie和他的用戶標識符的SHA2哈希加一個祕密的長鹽(例如32字節鹽)。 關於問題二:爲了交換東西並調用遠程函數,我會使用RPC庫dnode。 關於問題三:使用相同的東西來調用客戶端之間的方法。

客戶端代碼(只是一個例子):

DNode.connect(function (remote) { 
     this.newPeer = function(peer) { 
      peer.sendChatMessage("Hello!"); 
     }; 
    }); 

您不必如果使用dnode使用遊戲的ID - 只是手功能綁定到遊戲瀏覽器。如果您出於某種原因需要身份證,請使用UUID模塊創建漫長而隨機的身份證 - 它們是不可猜測的。

+0

'dnode ++ && substack ++' – Raynos