2011-01-12 125 views
4

我已經搜索並閱讀了很多文章,並看了一下GKTank蘋果示例(無法看到有關我的問題的任何細節,似乎是在事件發生時處理),但我無法看到示例或教程,似乎回答多人遊戲藍牙以下iphone多人遊戲設計

/互聯網(也許)是如何做到這一點發生在考慮延遲等正確的勝負結果可以同步播放器互動......

例如:

按鈕顯示給每個玩家A & B在兩個獨立的設備上連接玩家A按下按鈕(玩家A正在主持遊戲,所以等待時間不是問題) 玩家B在玩家A之前按下按鈕,但他與玩家A的設備的連接至少有一個200毫秒的網絡延遲

問題:即使玩家A的觸摸請求會首先到達遊戲代碼,遊戲需要先知道玩家B,即對主持玩家沒有好處。

我知道觸摸事件有時間戳,所以我可以確保新聞的實際時間從播放器B發送到遊戲代碼......但不知道這是否正確的方法,如果它是在哪裏從那裏..

我希望答案就在接觸不會立即不過是一場遊戲週期內處理一些遊戲時間週期...

任何幫助這個或指針教程或特定的源代碼處理這個將不勝感激。

亞當

回答

2

您可能要問上https://gamedev.stackexchange.com/這個問題,因爲它是關於多人滯後或延遲一個一般性的問題,並沒有什麼特別具體到iPhone。

您可能可以使用時間戳來訂購操作消息。我認爲iPhone同步到由AT & T維護的日期時間服務器。

1

那麼我沒有創建多人遊戲的實際經驗。但是與大多數遊戲開發問題一樣,我認爲沒有錯誤或正確的,所以一些邏輯思維應該做到這一點。

以下是你可能要考慮的一些想法:

  • 即使不存在延時玩家A的設備上發生的,你就必須引進一些,以彌補玩家B(反之亦然,因爲從玩家B的觀點玩家A也遲到了)
  • 因此,您需要引入某種「命令堆棧」來緩衝來自兩個玩家的輸入,並且一旦玩家有機會貢獻他們的輸入就執行命令對於遊戲時間的給定點
  • 您可能想要引入ping命令來測量實際延遲f ROM時間
  • 只有一個設備(主機)應該測量延遲並將其通告給客戶端
  • 根據測量的延遲,計算命令的時間偏移(相對於主機時間)或延遲(使用等待時間將播放器B的時間戳轉換爲「本地」時間)
  • 如果可能,保持延遲動態以補償不同的延遲(保持整個會話期間的延遲測量
  • 如果實際延遲超過計算一個,來自玩家B的命令可能被延遲放置到堆疊上 - 確保它們將被執行(此時可能會經歷滯後)
  • 你實際上需要兩個「層」 - 輸入層,其中交流,緩衝區和同步實際輸入,以及一個遊戲層,其中從輸入層接收

到目前爲止,延遲的命令,我2美分;-)

+0

感謝評論 - 幾乎與我在想的一樣,儘管我希望別人可能已經完成了驢工作邏輯,因爲它必須出現在跨設備的所有多人遊戲中。我想我必須自己解決它。 – 2011-01-13 10:11:55