游戲說明
每個玩家控制一個飛機,在網絡世界里盡情的pk。前期簡單的操作就是左右鍵、飛行或者停止以及射擊鍵,以及技能。擊中算死亡,死亡后,會再度復活。
同步策略
幀同步
游戲的所有邏輯都在服務器,客戶端將操作發給服務器,服務器每幀發送位置坐標給客戶端,客戶端繪制游戲實體。
- 優點:簡單。。。絕對同步
- 缺點:服務器壓力太大,另外,一旦有延遲,客戶端就是斷斷續續的。我覺得適用于局域網。
關鍵幀同步
游戲的所有邏輯和數據都在服務器,這是肯定的,否則玩家會作弊??蛻舳藭巡僮靼l給服務器,但是服務器不會每幀同步,而是在兩種條件下進行同步。
- 狀態改變時,比如轉方向,變速度
- 當處于移動時,每過1秒或者更久進行狀態同步
那么客戶端會根據服務器的狀態調整,和幀同步的完全依賴服務器的坐標不同的是,客戶端多了一些移動,狀態改變等邏輯,還有同步狀態對的邏輯。同步狀態的算法將決定游戲是否流暢,簡單的即時同步,將會讓顯示看上去有點跳躍。
- 優點:移動順滑,發包少
- 缺點:同步不是絕對的,會和服務器的真實位置有略微差距
邏輯實現
服務器發送過來的內容將會是結束時間和結束時狀態,客戶端會用差值的方式在結束時間內達到這個狀態。由于是用差值的方式,所以客戶端會比較順滑。
關于服務器和客戶端時間同步
目前我認為在相同的時區內,時間是同步的。但是依靠這個非常不靠譜,比如玩家設置成了別的時區,或者長期不同步時間,或者手動改時間。簡單的策略是,在登錄時,獲取服務器時間,并和本地時間進行比較,將差值記錄下來,并根據差值計算當前的服務器時間。這是一個粗略的計算。