一種遊戲同步方法、系統及相關設備與流程
2024-01-31 12:20:15
本發明涉及數據處理技術領域,尤其涉及一種遊戲同步方法、系統及相關設備。
背景技術:
目前,開發實時同步遊戲,往往需要開發者針對特定的遊戲類型,在不同的網絡狀況下,編寫大量特定的代碼,來平衡和適配遊戲的一致性(即遊戲畫面的同步效果)和流暢性。根據不同的遊戲內容,需要開發完全不同的網絡同步流程,即分別為不同的遊戲操作,編寫不同的網絡同步策略,由於遊戲玩法本身非常多樣,所以在調試不同的同步策略以及體驗效果的時候,需要頻繁大量的修改不同玩法狀態的網絡同步數據包的發送、接收處理策略等,從而導致非常大的開發工作量,技術成本高昂,靈活性差,效率較低。可見,現有的遊戲同步策略無法靈活、高效地對遊戲的流暢性和一致性進行控制,也無法有效降低遊戲的開發成本。
技術實現要素:
本發明實施例提供了一種遊戲同步方法、系統及相關設備,可以靈活、高效地對遊戲畫面的流暢性和一致性進行控制,可以有效降低遊戲的開發成本。
本發明實施例第一方面提供了一種遊戲同步方法,包括:
獲取輸入的遊戲操作指令;
當本地預渲染定時到達時,根據預渲染次數和預設的預渲染次數閾值運行所述遊戲操作指令對應的遊戲邏輯,以進行遊戲畫面的預渲染;
當接收到伺服器發送的網絡數據包時,運行所述網絡數據包對應的遊戲邏輯,以進行遊戲畫面在處於同一遊戲場景的各個客戶端之間的同步,並將所述預渲染次數清零,所述網絡數據包包括所述各個客戶端發送的遊戲數據。
本發明實施例第二方面提供了一種遊戲同步方法,包括:
接收處於同一遊戲場景的各個客戶端在本地預渲染定時到達時發送的遊戲數據;
將所述遊戲數據對應緩存到預先為所述各個客戶端分別建立的遊戲數據緩衝區隊列中;
當遊戲同步定時到達時,通過讀取所述遊戲數據緩衝區隊列生成網絡數據包,並向所述各個客戶端發送所述網絡數據包,所述網絡數據包包括所述遊戲數據,所述網絡數據包用於所述各個客戶端的遊戲畫面的同步。
本發明實施例第三方面提供了一種客戶端,包括:
獲取模塊,用於獲取輸入的遊戲操作指令;
處理模塊,用於當本地預渲染定時到達時,根據預渲染次數和預設的預渲染次數閾值運行所述遊戲操作指令對應的遊戲邏輯,以進行遊戲畫面的預渲染;
接收模塊,用於接收伺服器發送的網絡數據包;
所述處理模塊,還用於當所述接收模塊接收到所述網絡數據包時,運行所述網絡數據包對應的遊戲邏輯,以進行遊戲畫面在處於同一遊戲場景的各個客戶端之間的同步,並將所述預渲染次數清零,所述網絡數據包包括所述各個客戶端發送的遊戲數據。
本發明實施例第四方面提供了一種伺服器,包括:
接收模塊,用於接收處於同一遊戲場景的各個客戶端在本地預渲染定時到達時發送的遊戲數據;
緩存模塊,用於將所述遊戲數據對應緩存到預先為所述各個客戶端分別建立的遊戲數據緩衝區隊列中;
生成模塊,用於當遊戲同步定時到達時,通過讀取所述遊戲數據緩衝區隊列生成網絡數據包;
發送模塊,用於向所述各個客戶端發送所述網絡數據包,所述網絡數據包包括所述遊戲數據,所述網絡數據包用於所述各個客戶端的遊戲畫面的同步。
本發明實施例第五方面提供了一種遊戲同步系統,包括:如上述第三方面所述的客戶端和如上述第四方面所述的伺服器。
本發明實施例第六方面提供了一種存儲介質,所述存儲介質中存儲有指令,當其在計算機上運行時,使得計算機執行如上述第一方面所述的遊戲同步方法。
本發明實施例第七方面提供了一種存儲介質,所述存儲介質中存儲有指令,當其在計算機上運行時,使得計算機執行如上述第二方面所述的遊戲同步方法。
通過本發明實施例中可以獲取輸入的遊戲操作指令,當本地預渲染定時到達時,根據預渲染次數和預設的預渲染次數閾值運行遊戲操作指令對應的遊戲邏輯,以進行遊戲畫面的預渲染;當接收到伺服器發送的網絡數據包時,運行網絡數據包對應的遊戲邏輯,以進行遊戲畫面在處於同一遊戲場景的各個客戶端之間的同步,並將預渲染次數清零,該網絡數據包包括該各個客戶端發送的遊戲數據,從而根據預渲染次數閾值可以靈活、高效地對遊戲的流暢性和一致性進行控制,並可以有效降低遊戲的開發成本。
附圖說明
為了更清楚地說明本發明實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發明的一些實施例,對於本領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據這些附圖獲得其他的附圖。
圖1是本發明實施例提供的一種遊戲系統的結構示意圖;
圖2是本發明實施例提供的一種遊戲同步方法的流程示意圖;
圖3a是本發明實施例提供的一種遊戲數據的接收與廣播示意圖;
圖3b是本發明實施例提供的另一種遊戲數據的接收與廣播示意圖;
圖3c是本發明實施例提供的一種遊戲畫面不同步的示意圖;
圖3d是本發明實施例提供的另一種遊戲畫面不同步的示意圖;
圖3e是本發明實施例提供的另一種遊戲同步方法的流程示意圖;
圖4是本發明實施例提供的一種客戶端的結構示意圖;
圖5是本發明實施例提供的一種伺服器的結構示意圖;
圖6是本發明實施例提供的另一種客戶端的結構示意圖;
圖7是本發明實施例提供的另一種伺服器的結構示意圖。
具體實施方式
下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發明一部分實施例,而不是全部的實施例。基於本發明中的實施例,本領域普通技術人員在沒有作出創造性勞動前提下所獲得的所有其他實施例,都屬於本發明保護的範圍。
本發明實施例中所描述的客戶端具體可以包括智慧型手機、平板電腦、筆記本、臺式機、移動網際網路設備(mobileinternetdevice,mid)、智能可穿戴設備等。
請參閱圖1,為本發明實施例提供的一種遊戲系統的結構示意圖。本實施例中所描述的遊戲系統,包括:伺服器101和多個客戶端102,伺服器101可以提供遊戲場景(如遊戲房間等),多個客戶端102可以在伺服器101提供的同一遊戲場景中進行遊戲。一個客戶端102可以對應至少一個能夠操作該客戶端102的用戶(即玩家),伺服器101可以在該多個客戶端102之間進行遊戲畫面的同步。本發明實施例提供的遊戲系統可以應用在對遊戲畫面的一致性要求較高的網路遊戲中,也可以應用在客戶端本地對遊戲畫面的流暢性要求較高的網路遊戲中。
請參閱圖2,為本發明實施例基於圖1所示的遊戲系統提供的一種遊戲同步方法的流程示意圖。本實施例中所描述的遊戲同步方法,包括以下步驟:
201、客戶端獲取輸入的遊戲操作指令。
具體實現中,客戶端在運行遊戲的過程中,可以接收用戶通過輸入設備(如滑鼠、鍵盤、觸控螢幕、遊戲手柄等)輸入的遊戲操作指令,遊戲操作指令即用戶輸入的對遊戲的操控行為,例如,控制玩家角色的移動狀態,攻擊敵方等。
202、當本地預渲染定時到達時,所述客戶端根據預渲染次數和預設的預渲染次數閾值運行所述遊戲操作指令對應的遊戲邏輯,以進行遊戲畫面的預渲染。
其中,本地預渲染定時用於表示客戶端本地每隔預設第一時長渲染一次遊戲畫面,例如,本地預渲染定時為1/60秒,則預設第一時長為1/60秒,客戶端每隔1/60秒本地渲染一次遊戲畫面,也即遊戲畫面的本地渲染頻率為60幀/秒。
其中,預渲染次數用於記錄客戶端本地已經完成的遊戲畫面的渲染次數,且每進行一次遊戲畫面在本地的渲染,則預渲染次數加1。預設的預渲染次數閾值用於限定客戶端本地可以預渲染遊戲畫面的最大次數。
可以理解的,在設定的取值範圍內,預渲染次數閾值越大,本地客戶端遊戲畫面的流暢性越好。
具體實現中,本地預渲染定時到達時,客戶端先判斷記錄的預渲染次數是否小於或等於預設的預渲染次數閾值,如果客戶端本地預渲染的次數還未達到預設的預渲染次數閾值,則客戶端運行該遊戲操作指令對應的遊戲邏輯,以執行本地的遊戲操作,完成遊戲畫面在本地的預渲染,例如,控制玩家角色的移動狀態,攻擊敵方等。
203、若所述預渲染次數小於或等於所述預設的預渲染次數閾值,則所述客戶端向伺服器發送遊戲數據,所述伺服器接收所述遊戲數據。
其中,遊戲數據包括遊戲操作指令和/或遊戲狀態參數,遊戲狀態參數是指遊戲當前所處的狀態,例如,擊中敵機,玩家飛機被擊中,扣減血量,消耗彈藥,玩家角色的位置等。
具體實現中,處於同一遊戲場景的各個客戶端在本地預渲染定時到達時,如果本地預渲染的次數還未達到預設的預渲染次數閾值,則向伺服器發送各自的遊戲數據,伺服器接收該各個客戶端發送的遊戲數據。
在一些可行的實施方式中,伺服器可以為處於同一遊戲場景的各個客戶端分別建立一個遊戲數據緩衝區隊列,用於存儲對應客戶端發送的遊戲數據,伺服器接收到某一客戶端發送的遊戲數據後,將遊戲數據存儲到該某一客戶端對應的遊戲數據緩衝區隊列中。
需要說明的是,步驟202和203執行的先後順序不做限定,即本地預渲染定時到達時,客戶端可以先進行遊戲畫面的本地預渲染,也可以先向伺服器發送遊戲數據。或者,步驟202和203也可以是同步執行。
204、當遊戲同步定時到達時,所述伺服器通過讀取預先建立的緩衝區隊列生成網絡數據包。
205、所述伺服器向所述客戶端發送所述網絡數據包,所述客戶端接收所述網絡數據包。
其中,遊戲同步定時用於表示伺服器每隔預設第二時長通過向處於同一遊戲場景的各個客戶端發送一次網絡數據包,使得該各個客戶端進行一次遊戲畫面的同步,例如,遊戲同步定時為1/20秒,則預設第二時長為1/20秒,伺服器每隔1/20秒控制處於同一遊戲場景的各個客戶端進行一次遊戲畫面的同步,也即網絡數據包的發送頻率為20包/秒。
具體實現中,每當遊戲同步定時到達時,伺服器從各個客戶端對應的遊戲數據緩衝區隊列中分別讀取遊戲數據,並將分別讀取到的遊戲數據中各個客戶端在同一時間的遊戲操作指令和/或遊戲狀態參數進行匯總,生成網絡數據包,進而向該各個客戶端發送該網絡數據包。
如圖3a所示,包括3個客戶端,客戶端a、客戶端b和客戶端c,a操作代表客戶端a接收到的用戶輸入的操作(即上述遊戲操作指令),b操作和c操作同理,客戶端a、客戶端b和客戶端c分別將各自接收到的用戶輸入的操作發送給伺服器,假設客戶端a向伺服器發送了3個a操作,客戶端b向伺服器發送了1個b操作,客戶端c向伺服器發送了2個c操作,客戶端a發送第1個a操作的時間與客戶端b發送b操作的時間、客戶端c發送第1個c操作的時間相同,客戶端a發送第2個a操作的時間與客戶端c發送第2個c操作的時間相同,伺服器接收這3個客戶端分別發送的操作,將3個客戶端分別發送的操作按照時間順序依次存儲到對應的遊戲數據緩衝區隊列中,當遊戲同步定時到達時,伺服器從這3個客戶端對應的遊戲數據緩衝區隊列中分別取出一個操作,則第一次取出的操作包括第1個a操作、b操作和第1個c操作,將第1個a操作、b操作和第1個c操作合併後生成網絡同步包(即上述網絡數據包),並分別向客戶端a、客戶端b和客戶端c發送該網絡同步包。
同理,當遊戲同步定時再次到達時,伺服器從這3個客戶端對應的遊戲數據緩衝區隊列中分別取出一個操作,由於客戶端b對應的遊戲數據緩衝區隊列中第二個存儲位置處為空,則第二次取出的操作包括第2個a操作和第2個c操作,將第2個a操作和第2個c操作合併後生成網絡同步包,並分別向客戶端a、客戶端b和客戶端c發送該網絡同步包。
再如圖3b所示,包括2個客戶端,客戶端1p和客戶端2p。在t1時刻,客戶端1p向伺服器發送用戶輸入的操作opr1,客戶端2p向伺服器發送用戶輸入的操作opr2;到了t2時刻,客戶端2p向伺服器發送用戶輸入的操作opr3;再到t3時刻,客戶端1p向伺服器發送用戶輸入的操作opr4,將這2個客戶端分別發送的操作按照時間順序依次存儲到對應的遊戲數據緩衝區隊列中,當遊戲同步定時到達時,這2個客戶端對應的遊戲數據緩衝區隊列都沒有數據,則伺服器向這2個客戶端發送內容為空(empty)且帶遞增序列號的網絡同步包;當遊戲同步定時再次到達時,伺服器從這2個客戶端對應的遊戲數據緩衝區隊列中分別取出一個操作,則本次取出的操作包括客戶端1p發送的opr1和客戶端2p發送的opr2,伺服器向這2個客戶端發送內容包括opr1和opr2的網絡同步包;同理,後續當遊戲同步定時再次到達時,伺服器向這2個客戶端發送的網絡同步包的內容依次為空、客戶端2p發送的opr3、空、空、客戶端1p發送的opr4。
206、當接收到所述網絡數據包時,所述客戶端運行所述網絡數據包對應的遊戲邏輯,並將所述預渲染次數清零。
具體實現中,客戶端接收到網絡數據包之後,獲取網絡數據包中處於同一遊戲場景的其它客戶端向伺服器發送的遊戲數據,由於該客戶端向伺服器發送的遊戲數據對應的遊戲邏輯已經在該客戶端本地預先運行過,即該客戶端只需運行處於同一遊戲場景的其它客戶端向伺服器發送的遊戲數據對應的遊戲邏輯即可,從而該客戶端根據該其它客戶端向伺服器發送的遊戲數據包括的遊戲操作指令和/或遊戲狀態參數確定出對應的遊戲邏輯,並運行該遊戲邏輯,從而可以單獨同步遊戲操作指令對應的遊戲動作,也可以單獨同步遊戲狀態信息,還可以同時同步遊戲動作和遊戲狀態信息,具備較強的通用性。
此外,客戶端還需將預渲染次數清零,本地預渲染的次數重新開始計數,客戶端繼續按照本地預渲染定時運行輸入的遊戲操作指令對應的遊戲邏輯,也即進行遊戲畫面的本地預渲染。
在一些可行的實施方式中,本發明實施例中遊戲邏輯的運行可以由兩個函數來實現,一個用於客戶端本地遊戲畫面的預渲染,可以記為update函數,一個用於遊戲畫面在多個客戶端之間的同步,可以記為updatebynet函數。具體的,本地預渲染定時到達時,客戶端調用並執行update函數,包括:如果預渲染次數小於或等於預設的預渲染次數閾值,則客戶端運行遊戲操作指令對應的遊戲邏輯,向伺服器發送遊戲數據(如該遊戲操作指令、遊戲狀態參數等),並將預渲染次數加1,如果預渲染次數大於預設的預渲染次數閾值,則直接返回(return),結束對update函數的執行;當接收到伺服器發送的網絡數據包時,客戶端調用並執行updatebynet函數,包括:將網絡數據包作為參數傳入updatebynet函數,運行網絡數據包對應的遊戲邏輯,並將預渲染次數清零。
舉例來說,將網絡數據包的發送頻率記為x,通常x的取值在10包/秒~20包/秒,將遊戲畫面的本地渲染頻率記為y,通常y的取值為30幀/秒~60幀/秒,預設的預渲染次數閾值記為max_n,max_n的最小值可取y/x,通常可以認為1秒的誤差對於遊戲畫面是比較容易糾正的,則max_n的取值範圍可以設為y/x~60。在網絡狀況良好(即網絡延遲較短)的情況下,遊戲畫面的本地流暢性和在各個客戶端之間的一致性都是非常好的,max_n這個參數的設置不會使得用戶的遊戲體驗有所下降。在網絡狀況較差(即網絡延遲較長)的情況下,可以將max_n設為較大值,優先運行客戶端本地的遊戲邏輯,使本地客戶端所顯示的角色狀態,領先遠程客戶端所顯示的角色狀態,這個不一致的時間值的下限為網絡延遲,上限為max_n*網絡數據包之間的發送時間間隔(即上述預設第二時長),則本地客戶端能保持最多max_n*預設第二時長的流暢,付出的代價就是這段時間裡本地客戶端與遠程客戶端上遊戲畫面的不一致(即遊戲畫面不同步)。如果希望通過犧牲一些流暢性,來減少因為網絡延遲造成的遊戲畫面不一致,則減少max_n的值即可。也即,只需通過調整預設的預渲染次數閾值max_n的值,就可以調整本地預渲染次數和網絡數據包同步次數的比例,從而使得網路遊戲表現出不同的一致性/流暢性特徵,從而可以適用於各種不同要求的網路遊戲,通用性強。
假設,網絡延遲為1秒,遊戲畫面的本地渲染頻率y=60幀/秒,網絡數據包的發送頻率x=20包/秒,則當max_n的取值大於或等於20時,由於max_n*1/x大於等於1秒,此時,遊戲畫面的不一致情況由網絡延遲決定,如圖3c所示,即本地客戶端(即客戶端a)上的遊戲畫面表現領先於處於同一遊戲場景的其它客戶端(即客戶端b)的遊戲畫面1秒的時長。
又假設,網絡延遲為1秒,遊戲畫面的本地渲染頻率y=60幀/秒,網絡數據包的發送頻率x=20包/秒,當max_n的取值為10的時候,遊戲畫面的不一致情況會被控制在max_n*1/x=10*1/20秒=0.5秒,如圖3d所示,此時本地客戶端(即客戶端a)上的遊戲畫面表現領先於處於同一遊戲場景的其它客戶端(即客戶端b)的遊戲畫面0.5秒的時長,但此時本地客戶端上的遊戲畫面會存在0.5秒的卡頓,遊戲畫面的流暢性會受一定的影響。
在一些可行的實施方式中,對於不同的網路遊戲,可以忍受的不一致性是不同的,在不一致性可以忍受的情況下,可以儘量的調大max_n的值以獲得本地客戶端更多的流暢性。
在一些可行的實施方式中,本實施例提供的遊戲同步方法的核心流程可以表示為如圖3e所示的形式,具體包括:
客戶端a獲取用戶輸入的遊戲操作指令。
如果預渲染次數n還未達到預設的預渲染次數閾值max_n,則客戶端a響應遊戲操作指令預先顯示角色狀態,實現遊戲畫面在本地的預渲染,並預先計算遊戲邏輯,以及向伺服器發送該遊戲操作指令。
伺服器接收到客戶端a發送的遊戲操作指令後,同時向客戶端a和客戶端b發送該遊戲操作指令。
客戶端a接收到該遊戲操作指令後,對預先計算的遊戲邏輯得到的遊戲結果進行糾正,客戶端b接收到該遊戲操作指令後,計算該遊戲操作指令對應的遊戲邏輯,以及顯示遊戲結果。
其中,對於不同類型遊戲的同步策略都可以全部抽象成圖3e所示的流程,然後通過調整一個簡單的參數(即預設的預渲染次數閾值max_n)就可以完成遊戲在本地客戶端的流暢性和在多個客戶端之間的一致性上的調整。不管是一個遊戲中的不同操作,還是不同遊戲的玩法,都可以使用如上所述的算法實現,需要做的僅僅是調整算法的輸入(即預設的預渲染次數閾值max_n),就能控制遊戲在流暢性和一致性上表現出不同的側重,大大節省了遊戲開發調試時的成本。
以下舉例說明本實施例提供的遊戲同步方法在實際的遊戲場景中的應用。
遊戲場景一,飛行射擊類遊戲。由於此類遊戲通常是雙人合作對抗系統設定的角色,因此其畫面一致性要求極低,而遊戲中大量的快速彈幕,要求本地客戶端運行非常流暢才能保持體驗,此類遊戲一般會按照各自客戶端的運行情況,通過網絡來同步一些戰鬥結果,如擊中敵機、玩家飛機被擊中。而對於玩家飛機的位置,僅僅是定時發送狀態數據(即遊戲狀態參數),同步到遠程客戶端上做單純的顯示而已。這種顯示可以是完全不同步的。在編寫這類實時對戰遊戲的時候,需要發送和接收的網絡數據通常有:擊中消息、遠程玩家的位置。而所有關於本地玩家的畫面表現、是否擊中,完全在本地客戶端計算,從而針對此類遊戲預渲染次數閾值max_n可以設置的非常大,例如預渲染次數閾值max_n=60,如果網絡數據包的發送頻率為10包/秒,遊戲畫面的本地渲染頻率為60幀/秒,由於本地客戶端每接收到一次網絡數據包就會將預渲染次數n清零一次,即每隔1/10秒(即0.1秒)將預渲染次數n清零一次,並且預渲染次數達到預渲染次數閾值需要(1/60)秒*60=1秒,相當於本地客戶端不停地進行遊戲畫面的預渲染,同時當接收到擊中消息、遠程玩家的位置等網絡數據包後進行遊戲畫面在本地客戶端和遠程客戶端的同步,從而可以保證本地客戶端的運行非常流暢。
遊戲場景二,橫版格鬥類遊戲。此類遊戲既可以多人合作對抗系統設定的角色,也可以互相pk。在對抗系統設定的角色時流暢性要求遠遠大於一致性;而pk時畫面一致性又成為最重要的要求。現有技術一般針對此類遊戲會設計2套不同的網絡同步算法:在合作對抗系統設定的角色模式下,客戶端本地運算所有關於本地玩家的操作,然後廣播操作結果,如是否擊中怪物,是否被怪物擊中,這類消息給遠程客戶端。遠程客戶端收到此類消息直接播放其結果,如播放怪物、角色的受擊動畫,扣減血量;在pk模式下,客戶端各自向伺服器發送玩家操作,但不立刻在本地運行玩家的操作,伺服器在收到各個客戶端的操作後,會廣播所有這些操作,當客戶端收到伺服器廣播的所有玩家(包括自己)的操作後,才開始在運行畫面的渲染和遊戲邏輯的計算,這樣就能保證各個客戶端是完全公平一致的,這種技術也成為「幀同步」。
而採用本實施例提供的遊戲同步方法,針對此類遊戲只需設計1套不同的網絡同步算法,通過調整預渲染次數閾值即可實現,具體包括:在合作對抗系統設定的角色模式下,由於流暢性要求遠遠大於一致性,預渲染次數閾值max_n可以設置的非常大,例如預渲染次數閾值max_n=60,如果網絡數據包的發送頻率為10包/秒,遊戲畫面的本地渲染頻率為60幀/秒,由於本地客戶端每接收到一次網絡數據包就會將預渲染次數n清零一次,即每隔1/10秒(即0.1秒)將預渲染次數n清零一次,並且預渲染次數達到預渲染次數閾值需要(1/60)秒*60=1秒,相當於本地客戶端不停地進行遊戲畫面的預渲染,包括是否擊中怪物,是否被怪物擊中,扣減血量等等,同時當接收到網絡數據包後進行遊戲畫面在本地客戶端和遠程客戶端的同步,從而可以保證本地客戶端的運行非常流暢。而在pk模式下,畫面一致性要求非常高,此時預渲染次數閾值max_n可以設置的非常小,例如預渲染次數閾值max_n=1,如果網絡數據包的發送頻率為20包/秒,遊戲畫面的本地渲染頻率為30幀/秒,由於本地客戶端每接收到一次網絡數據包就會將預渲染次數n清零一次,即每隔1/20秒(即0.05秒)將預渲染次數n清零一次,而預渲染次數達到預渲染次數閾值需要(1/30)秒*1=0.03秒,即本地客戶端進行一次遊戲畫面在本地的預渲染後,不再進行遊戲畫面在本地的預渲染,而是等待伺服器發送的網絡數據包,接收到網絡數據包後進行遊戲畫面在本地客戶端和遠程客戶端的同步,從而可以保證畫面一致性非常高。
遊戲場景三,moba類遊戲,此類遊戲不管是對抗系統設定的角色,還是相互pk,都對操作流暢性要求極高。現有技術一般針對這類遊戲會直接採用「幀同步」作為網絡同步方法。然而,完全的「幀同步」會導致玩家輸入操作有一定的「延遲」,因為需要等待伺服器廣播回來的網絡數據包才會渲染畫面,所以一般這類遊戲會有一些本地預先運算的部分:如最常見的有移動操作,玩家在輸入移動指令後,客戶端並不等待伺服器廣播下發回移動指令包,才進行玩家移動的渲染,而是立刻執行移動渲染,等到移動指令包通過網絡返回之後,通過網絡包所記載的發出時間,計算出其他客戶端所顯示的位置,然後進行輕微的拉扯糾正。
而採用本實施例提供的遊戲同步方法,通過將預渲染次數閾值max_n設置的非常大即可解決流暢性問題,同時還可以避免客戶端再進行輕微的拉扯糾正帶來的遊戲畫面有所跳動,例如預渲染次數閾值可以設為max_n=60,如果網絡數據包的發送頻率為10包/秒,遊戲畫面的本地渲染頻率為60幀/秒,由於本地客戶端每接收到一次網絡數據包就會將預渲染次數n清零一次,即每隔1/10秒(即0.1秒)將預渲染次數n清零一次,並且預渲染次數達到預渲染次數閾值需要(1/60)秒*60=1秒,相當於本地客戶端可以不停地進行遊戲畫面的預渲染,如最常見的移動操作,同時當接收到伺服器廣播的網絡數據包後進行遊戲畫面在本地客戶端和遠程客戶端的同步,從而可以保證本地客戶端的運行非常流暢。
需要說明的是,本實施例所描述的遊戲同步方法還可以應用於顯示用戶實時位置的社區系統,如聊天室。或者,還可以應用於多人地圖位置信息共享系統中,用來優化顯示地理位置的同步展示,不但可以同步位置,還可以同步行駛的過程等。
本發明實施例中,客戶端獲取輸入的遊戲操作指令,當本地預渲染定時到達時,如果預渲染次數小於或等於預設的預渲染次數閾值,則客戶端運行遊戲操作指令對應的遊戲邏輯,完成遊戲畫面的本地預渲染,並將包括遊戲操作指令和/或遊戲狀態參數的遊戲數據發送給伺服器。在遊戲同步定時到達時,伺服器從各個客戶端對應的遊戲數據緩衝區隊列中獲取遊戲數據,並合併成網絡數據包,向各個客戶端發送該網絡數據包。當接收到網絡數據包時,客戶端運行網絡數據包對應的遊戲邏輯,完成遊戲畫面在各個客戶端之間的同步,並將預渲染次數清零,從而根據預設的預渲染次數閾值可以靈活、高效地對遊戲的流暢性和一致性進行控制,並可以有效降低遊戲的開發成本。
請參閱圖4,為本發明實施例提供的一種客戶端的結構示意圖。本實施例中所描述的客戶端,包括:
獲取模塊401,用於獲取輸入的遊戲操作指令;
處理模塊402,用於當本地預渲染定時到達時,根據預渲染次數和預設的預渲染次數閾值運行所述遊戲操作指令對應的遊戲邏輯,以進行遊戲畫面的預渲染;
接收模塊403,用於接收伺服器發送的網絡數據包;
所述處理模塊402,還用於當所述接收模塊接收到所述網絡數據包時,運行所述網絡數據包對應的遊戲邏輯,以進行遊戲畫面在處於同一遊戲場景的各個客戶端之間的同步,並將所述預渲染次數清零,所述網絡數據包包括所述各個客戶端發送的遊戲數據。
在一些可行的實施方式中,所述客戶端還包括:
發送模塊404,用於向所述伺服器發送遊戲數據。
在一些可行的實施方式中,所述處理模塊402運行所述網絡數據包對應的遊戲邏輯的具體方式為:
獲取所述網絡數據包中處於同一遊戲場景的其它客戶端向所述伺服器發送的遊戲數據;
確定所述其它客戶端向所述伺服器發送的遊戲數據對應的遊戲邏輯,並運行所述遊戲邏輯。
在一些可行的實施方式中,所述遊戲數據包括所述遊戲操作指令和/或遊戲狀態參數。
可以理解的是,本實施例的客戶端的各功能模塊的功能可根據上述方法實施例中的方法具體實現,其具體實現過程可以參照上述方法實施例的相關描述,此處不再贅述。
本發明實施例中,獲取模塊401獲取輸入的遊戲操作指令,當本地預渲染定時到達時,處理模塊402根據預渲染次數和預設的預渲染次數閾值運行遊戲操作指令對應的遊戲邏輯,以進行遊戲畫面的預渲染;當接收模塊403接收到伺服器發送的網絡數據包時,處理模塊402運行網絡數據包對應的遊戲邏輯,以進行遊戲畫面在處於同一遊戲場景的各個客戶端之間的同步,並將預渲染次數清零,從而根據預渲染次數閾值可以靈活、高效地對遊戲的流暢性和一致性進行控制,並可以有效降低遊戲的開發成本。
請參閱圖5,為本發明實施例提供的一種伺服器的結構示意圖。本實施例中所描述的伺服器,包括:
接收模塊501,用於接收處於同一遊戲場景的各個客戶端在本地預渲染定時到達時發送的遊戲數據;
緩存模塊502,用於將所述遊戲數據對應緩存到預先為所述各個客戶端分別建立的遊戲數據緩衝區隊列中;
生成模塊503,用於當遊戲同步定時到達時,通過讀取所述遊戲數據緩衝區隊列生成網絡數據包;
發送模塊504,用於向所述各個客戶端發送所述網絡數據包,所述網絡數據包包括所述遊戲數據,所述網絡數據包用於所述各個客戶端的遊戲畫面的同步。
在一些可行的實施方式中,所述生成模塊503,具體用於:
從所述各個客戶端各自對應的遊戲數據緩衝區隊列中分別獲取遊戲數據;
將所述分別獲取的遊戲數據合併後生成網絡數據包。
在一些可行的實施方式中,所述遊戲數據包括遊戲操作指令和/或遊戲狀態參數。
可以理解的是,本實施例的伺服器的各功能模塊的功能可根據上述方法實施例中的方法具體實現,其具體實現過程可以參照上述方法實施例的相關描述,此處不再贅述。
本發明實施例中,接收模塊501接收處於同一遊戲場景的各個客戶端在本地預渲染定時到達時發送的遊戲數據,緩存模塊502將該遊戲數據對應緩存到預先為各個客戶端分別建立的遊戲數據緩衝區隊列中,當遊戲同步定時到達時,生成模塊503通過讀取遊戲數據緩衝區隊列生成網絡數據包,發送模塊504向各個客戶端發送網絡數據包,網絡數據包包括遊戲數據,網絡數據包用於各個客戶端的遊戲畫面的同步,從可以靈活、高效地對遊戲的流暢性和一致性進行控制,並可以有效降低遊戲的開發成本。
請參閱圖6,為本發明實施例提供的另一種客戶端的結構示意圖。本實施例中所描述的客戶端,包括:處理器601、用戶接口602、網絡接口603及存儲器604。其中,處理器601、用戶接口602、網絡接口603及存儲器604可通過總線或其他方式連接,本發明實施例以通過總線連接為例。
其中,處理器601(或稱cpu(centralprocessingunit,中央處理器))是客戶端的計算核心以及控制核心,其可以解析客戶端內的各類指令以及處理客戶端的各類數據,例如:cpu可以用於解析用戶向客戶端所發送的開關機指令,並控制客戶端進行開關機操作;再如:cpu可以在客戶端內部結構之間傳輸各類交互數據,等等。用戶接口602是實現用戶與客戶端進行交互和信息交換的媒介,其具體體現可以包括用於輸出的顯示屏(display)以及用於輸入的鍵盤(keyboard)、滑鼠、遊戲手柄等等,需要說明的是,此處的鍵盤既可以為實體鍵盤,也可以為觸屏虛擬鍵盤,還可以為實體與觸屏虛擬相結合的鍵盤。網絡接口603可選的可以包括標準的有線接口、無線接口(如wi-fi、移動通信接口等),受處理器601的控制用於收發數據。存儲器604(memory)是客戶端中的記憶設備,用於存放程序和數據。可以理解的是,此處的存儲器604既可以包括客戶端的內置存儲器,當然也可以包括客戶端所支持的擴展存儲器。存儲器604提供存儲空間,該存儲空間存儲了客戶端的作業系統,可包括但不限於:windows系統(一種作業系統)、android系統、ios系統等等,本發明對此並不作限定。
在本發明實施例中,處理器601通過運行存儲器604中的可執行程序代碼,執行如下操作:
用戶接口602,用於獲取輸入的遊戲操作指令;
處理器601,用於當本地預渲染定時到達時,根據預渲染次數和預設的預渲染次數閾值運行所述遊戲操作指令對應的遊戲邏輯,以進行遊戲畫面的預渲染;
網絡接口603,用於接收伺服器發送的網絡數據包;
所述處理器601,還用於當所述網絡接口603接收到所述網絡數據包時,運行所述網絡數據包對應的遊戲邏輯,以進行遊戲畫面在處於同一遊戲場景的各個客戶端之間的同步,並將所述預渲染次數清零,所述網絡數據包包括所述各個客戶端發送的遊戲數據。
在一些可行的實施方式中,所述網絡接口603,還用於向所述伺服器發送遊戲數據。
在一些可行的實施方式中,所述處理器601運行所述網絡數據包對應的遊戲邏輯的具體方式為:
獲取所述網絡數據包中處於同一遊戲場景的其它客戶端向所述伺服器發送的遊戲數據;
確定所述其它客戶端向所述伺服器發送的遊戲數據對應的遊戲邏輯,並運行所述遊戲邏輯。
在一些可行的實施方式中,所述遊戲數據包括所述遊戲操作指令和/或遊戲狀態參數。
具體實現中,本發明實施例中所描述的處理器601、用戶接口602、網絡接口603及存儲器604可執行本發明實施例提供的一種遊戲同步方法的流程中所描述的實現方式,也可執行本發明實施例提供的一種客戶端中所描述的實現方式,在此不再贅述。
本發明實施例中,用戶接口602獲取輸入的遊戲操作指令,當本地預渲染定時到達時,處理器601根據預渲染次數和預設的預渲染次數閾值運行遊戲操作指令對應的遊戲邏輯,以進行遊戲畫面的預渲染;當網絡接口603接收到伺服器發送的網絡數據包時,處理器601運行網絡數據包對應的遊戲邏輯,以進行遊戲畫面在處於同一遊戲場景的各個客戶端之間的同步,並將預渲染次數清零,從而根據預渲染次數閾值可以靈活、高效地對遊戲的流暢性和一致性進行控制,並可以有效降低遊戲的開發成本。
請參閱圖7,為本發明實施例提供的另一種伺服器的結構示意圖。本實施例中所描述的伺服器,包括:處理器701、網絡接口702及存儲器703。其中,處理器701、網絡接口702及存儲器703可通過總線或其他方式連接,本發明實施例以通過總線連接為例。
其中,處理器701(或稱中央處理器(centralprocessingunit,cpu))是伺服器的計算核心以及控制核心。網絡接口702可選的可以包括標準的有線接口、無線接口(如wi-fi、移動通信接口等),受處理器701的控制用於收發數據。存儲器703(memory)是伺服器的記憶設備,用於存放程序和數據。可以理解的是,此處的存儲器703可以是高速ram存儲器,也可以是非不穩定的存儲器(non-volatilememory),例如至少一個磁碟存儲器;可選的還可以是至少一個位於遠離前述處理器701的存儲裝置。存儲器703提供存儲空間,該存儲空間存儲了伺服器的作業系統和可執行程序代碼,可包括但不限於:windows系統(一種作業系統)、linux(一種作業系統)系統等等,本發明對此並不作限定。
在本發明實施例中,處理器701通過運行存儲器703中的可執行程序代碼,執行如下操作:
網絡接口702,用於接收處於同一遊戲場景的各個客戶端在本地預渲染定時到達時發送的遊戲數據;
處理器701,用於將所述遊戲數據對應緩存到預先為所述各個客戶端分別建立的遊戲數據緩衝區隊列中;
所述處理器701,還用於當遊戲同步定時到達時,通過讀取所述遊戲數據緩衝區隊列生成網絡數據包;
所述網絡接口702,還用於向所述各個客戶端發送所述網絡數據包,所述網絡數據包包括所述遊戲數據,所述網絡數據包用於所述各個客戶端的遊戲畫面的同步。
在一些可行的實施方式中,所述處理器701,具體用於:
從所述各個客戶端各自對應的遊戲數據緩衝區隊列中分別獲取遊戲數據;
將所述分別獲取的遊戲數據合併後生成網絡數據包。
在一些可行的實施方式中,所述遊戲數據包括遊戲操作指令和/或遊戲狀態參數。
具體實現中,本發明實施例中所描述的處理器701、網絡接口702及存儲器703可執行本發明實施例提供的一種遊戲同步方法的流程中所描述的實現方式,也可執行本發明實施例提供的一種伺服器中所描述的實現方式,在此不再贅述。
本發明實施例中,網絡接口702接收處於同一遊戲場景的各個客戶端在本地預渲染定時到達時發送的遊戲數據,處理器701將該遊戲數據對應緩存到預先為各個客戶端分別建立的遊戲數據緩衝區隊列中,當遊戲同步定時到達時,處理器701通過讀取遊戲數據緩衝區隊列生成網絡數據包,網絡接口702向各個客戶端發送網絡數據包,網絡數據包包括遊戲數據,網絡數據包用於各個客戶端的遊戲畫面的同步,從可以靈活、高效地對遊戲的流暢性和一致性進行控制,並可以有效降低遊戲的開發成本。
本領域普通技術人員可以理解實現上述實施例方法中的全部或部分流程,是可以通過電腦程式來指令相關的硬體來完成,所述的程序可存儲於一計算機可讀取存儲介質中,該程序在執行時,可包括如上述各方法的實施例的流程。其中,所述的存儲介質可為磁碟、光碟、只讀存儲記憶體(read-onlymemory,rom)或隨機存儲記憶體(randomaccessmemory,ram)等。
以上所揭露的僅為本發明一種較佳實施例而已,當然不能以此來限定本發明之權利範圍,本領域普通技術人員可以理解實現上述實施例的全部或部分流程,並依本發明權利要求所作的等同變化,仍屬於發明所涵蓋的範圍。