2012-04-17 66 views
1

我剛開始學習HTML5 canvas和Google App Engine的Channel API。HTML5遊戲,用戶運動概念

我構建了一個基於等軸測圖的簡單遊戲演示。現在我想實施人物動作,但我想知道我應該如何實施它。

當前演示:http://cheukalex.appspot.com

這是我認爲這將是實現:

客戶端將處理運動。一旦箭頭鍵被按下,客戶端將執行移動,然後將新的協調發送到服務器,然後該服務器將被廣播給服務器上的其他用戶以更新角色的位置。

問題我想過:

  1. 如果我想實現「移動速度」,如能夠以多快 用戶步行五個廣場爲例。每個移動 之間的延遲將在客戶端完成。但那會安全嗎?因爲 JavaScripts很容易編輯。

  2. 如何處理延遲?如果我建立了一個簡單的追逐標籤遊戲,那麼我將如何同步用戶,這樣一個人看起來像是「標記」另一個用戶,但另一個用戶看到他1-2個方格後面,不會發生?


編輯: @nycynik,你是對的,延遲200毫秒左右。我已經在這裏測試過了。

延遲測試:http://cheukalex.appspot.com/latency

那是它永遠不會得到最小的延遲。 200ms非常快。那麼它可能是我的代碼很慢?

我是如何實現整個遊戲的。

  1. 客戶端進入網站
  2. 服務器在DB
  3. 創建令牌,開放信道,存儲客戶端的數據(信道ID)....一些邏輯
  4. 當客戶端按箭頭鍵,它會通知服務器哪個客戶端移動了什麼方向
  5. 服務器接收移動,邏輯,通過數據庫(僅當前在線客戶端)循環,向所有客戶端廣播地圖上每個客戶端在json中的位置。客戶然後「移動」。

這有什麼問題嗎?

+0

至於黑客的移動速度,服務器可以保持他們的最後一個位置,並檢查它與最大速度變量 - 如果它超過給定的時間差,HAXX太高。 – 2012-04-17 20:45:22

+0

你能分享更多關於你如何做的事嗎?該通道應該與套接字非常相似,並且對此應該足夠快。 – nycynik 2012-04-17 22:58:31

回答

2

這應該是對第一個答案的評論,但它不適合。

對於響應時間可能沒有太多可以做,因爲網絡延遲現在確實會成爲問題。也許你可以在用戶體驗方面工作。爲了讓延遲對用戶「可接受」,爲什麼不添加動畫?

例如,當用戶點擊箭頭鍵時,馬可能看起來像是慢慢拉回來並準備跳轉(在通過Channel API發送請求的幕後)。當你從服務器獲得迴應時,馬可以完成跳躍並落在另一個位置。

雖然仍然存在延遲問題,但如果延遲不明顯,您的用戶可能會發現它是「可接受的」。

+0

這是一個有效的解決方案。謝謝 – AlexCheuk 2012-04-18 17:09:50

1

如果我想實現「移動速度」

我會建議將您的移動到服務器,使服務器刷新主板。這將保持每個球員同步。

如何處理延遲?

如果您想要,您可以要求所有客戶端在服務器發出位置刷新之前報告,這將強制執行一致性,但是會採用LCD方法。我認爲這種類型的遊戲應該可以正常工作。

編輯: 最初我以爲它會像一個網絡套接字工作,但它看起來你的結果很多,慢得多。它可能是代碼中的東西,或者它可能是技術本身,但對於你想要做的事情來說,它似乎不夠快。如果這是一盤棋,你會沒事的。但對於這種類型的遊戲,你需要更快的往返工作。

此信息是指時間的期望

通道API遞送速度是100-200ms的量級上;

working with new channel creation limits

這應該是更快,那麼你做了什麼。

+0

與那個模型,我只是想知道它會關閉移動不是即時 – AlexCheuk 2012-04-17 20:53:03

+0

我只是在我的演示中添加了運動,並有服務器處理運動的明顯延遲。 Google的Channel API可能很慢? – AlexCheuk 2012-04-17 21:28:05

+0

是的,嘗試後,它是減速的方式。 – nycynik 2012-04-17 22:37:47