一種游戲地圖分時(shí)廣播的方法【技術(shù)領(lǐng)域】本發(fā)明涉及一種游戲地圖分時(shí)廣播的方法。
背景技術(shù):目前,在線角色扮演游戲中的玩家需要相互可見(jiàn),要想使某一玩家為中心,讓其他玩家以該中心玩家為中心進(jìn)行可見(jiàn)的話;現(xiàn)在一般的做法是:服務(wù)器需要以一定的規(guī)則來(lái)管理玩家可見(jiàn)的其他玩家并發(fā)給游戲客戶端表現(xiàn),客戶端也相應(yīng)的對(duì)游戲世界的玩家進(jìn)行管理。具體為:游戲服務(wù)器以地圖為單位管理游戲世界的所有玩家,并把地圖劃分為多個(gè)區(qū)塊。玩家登陸時(shí),游戲服務(wù)器遍歷玩家周圍盡可能少的區(qū)塊,收集這些區(qū)塊內(nèi)玩家可視范圍內(nèi)的其他玩家,并一次性發(fā)給客戶端顯示;玩家在游戲世界移動(dòng)時(shí),游戲服務(wù)器遍歷并收集新增可見(jiàn)的其他玩家發(fā)送給客戶端。在其他玩家離開(kāi)該中心玩家的可視范圍時(shí)客戶端主動(dòng)刪除這部分玩家。玩家的登陸、位置改變,游戲服務(wù)器也需要把這個(gè)玩家廣播給周圍的其他玩家。因?yàn)橛螒蚍?wù)器發(fā)送游戲?qū)ο蠼o客戶端會(huì)產(chǎn)生一定的流量和時(shí)間消耗,并且這一部分消耗很容易成為服務(wù)器的性能瓶頸,所以現(xiàn)在一般只廣播以某一玩家為中心玩家可見(jiàn)的范圍內(nèi)的其他玩家?,F(xiàn)有的技術(shù)實(shí)現(xiàn)了游戲世界中的玩家相互可見(jiàn),但是存在一些缺點(diǎn):1、如果大量玩家惡意聚集在某一區(qū)域,那任何一個(gè)玩家的登陸和移動(dòng)都需要廣播大量的玩家給客戶端,這會(huì)瞬間產(chǎn)生大量的流量和處理時(shí)間,會(huì)影響到整個(gè)游戲服務(wù)器的響應(yīng)時(shí)間,在客戶端體現(xiàn)出來(lái)就是游戲服務(wù)器的響應(yīng)很慢,使得玩家無(wú)法正常體現(xiàn)游戲的內(nèi)容。2、玩家的任何一點(diǎn)點(diǎn)移動(dòng)都需要重新遍歷玩家周圍的其他玩家,判斷是否有新增的玩家需要發(fā)給客戶端表現(xiàn),增加了游戲的消耗。3、游戲?qū)ο箅x開(kāi)玩家的可視范圍是由客戶端主動(dòng)判斷刪除的,很容易因?yàn)橐苿?dòng)位置跟游戲服務(wù)器的不同步導(dǎo)致可見(jiàn)的游戲?qū)ο蟛粚?duì)。現(xiàn)有技術(shù)中提供了一種"游戲地圖的存儲(chǔ)方法及裝置、游戲地圖的顯示方法及系統(tǒng)",見(jiàn)公開(kāi)號(hào)為:CN1924873,公開(kāi)日為:2007.03.07的中國(guó)專利,其中游戲地圖的顯示方法為:將游戲的游戲地圖采用地圖塊方式存儲(chǔ);獲取玩家的位置坐標(biāo),根據(jù)所述位置坐標(biāo)確定可見(jiàn)場(chǎng)景對(duì)應(yīng)的多個(gè)地圖塊;用二維數(shù)組存儲(chǔ)所述地圖塊的編號(hào);從保存的游戲地圖中獲取存儲(chǔ)于二維數(shù)組中的編號(hào)對(duì)應(yīng)的地圖信息;繪制獲取的地圖信息,并在屏幕上輸出;使用該方法,可以實(shí)現(xiàn)無(wú)縫游戲地圖,從而使游戲更為順暢。該發(fā)明的技術(shù)方案只是將游戲地圖采用地圖塊方式存儲(chǔ),然后需要時(shí)通過(guò)二維數(shù)組中的地圖塊編號(hào)進(jìn)行調(diào)用;其解決的技術(shù)問(wèn)題是實(shí)現(xiàn)無(wú)縫游戲地圖,并不能有效解決服務(wù)器的瞬卡,提高游戲服務(wù)器的執(zhí)行效率,減少游戲處理時(shí)的數(shù)據(jù)處理量。
技術(shù)實(shí)現(xiàn)要素:本發(fā)明要解決的技術(shù)問(wèn)題,在于提供一種游戲地圖分時(shí)廣播的方法,有效改進(jìn)游戲服務(wù)器的安全,提升游戲服務(wù)器的執(zhí)行效率,改進(jìn)玩家的體驗(yàn)。本發(fā)明是這樣實(shí)現(xiàn)的:一種游戲地圖分時(shí)廣播的方法,將每張游戲地圖進(jìn)行劃分為對(duì)應(yīng)的多個(gè)地圖塊的實(shí)例,并將所述每張游戲地圖對(duì)應(yīng)的多個(gè)地圖塊的實(shí)例在各游戲地圖中分配各自的坐標(biāo)位置,將每張游戲地圖對(duì)應(yīng)的多個(gè)地圖塊的實(shí)例均用一個(gè)二維數(shù)組進(jìn)行存儲(chǔ),該二維數(shù)組的每個(gè)數(shù)組元素的一維下標(biāo)和二維下標(biāo)對(duì)應(yīng)于所述各地圖塊的實(shí)例的坐標(biāo);每個(gè)地圖塊的實(shí)例都設(shè)置有一個(gè)一維數(shù)組1,該一維數(shù)組1用于緩存:需要發(fā)送給新進(jìn)入塊的玩家的其他玩家的ID集合,所述新進(jìn)入塊為玩家從一個(gè)地圖塊的實(shí)例進(jìn)入另一新地圖塊的實(shí)例;所述該一維數(shù)組1緩存的集合的下標(biāo)為新進(jìn)入塊的玩家ID,集合內(nèi)容為新地圖塊的實(shí)例內(nèi)的其他玩家ID;每張游戲地圖都設(shè)置有一個(gè)一維數(shù)組2,該一維數(shù)組2用于緩存:進(jìn)入玩家的視野的地圖塊的實(shí)例數(shù)據(jù)集合,所述玩家為剛登陸或者位置改變的玩家;所述該一維數(shù)組2緩存的集合的下標(biāo)為該玩家的ID,集合內(nèi)容為用于索引所述二維數(shù)組的數(shù)組元素的二維下標(biāo);定時(shí)分配給每張游戲地圖一預(yù)設(shè)時(shí)間遍歷各游戲地圖的一維數(shù)組2,取出該一維數(shù)組2中有發(fā)生改變地圖塊的實(shí)例對(duì)應(yīng)的數(shù)組元素;遍歷該數(shù)組元素的集合,根據(jù)集合內(nèi)容從所述二維數(shù)組中索引對(duì)應(yīng)的地圖塊的實(shí)例;然后從索引出的地圖塊的實(shí)例的一維數(shù)組1中取出一定數(shù)量所述其他玩家的集合,所述一定數(shù)量為游戲服務(wù)器預(yù)先設(shè)定的數(shù)量;把這部分其他玩家的數(shù)據(jù)信息發(fā)送給所述該數(shù)組元素的集合的下標(biāo)的玩家,并將取出的其他玩家的集合從一維數(shù)組1中的緩存中刪除;當(dāng)各張游戲地圖遍歷超出分配的預(yù)設(shè)時(shí)間時(shí),主動(dòng)退出。本發(fā)明具有如下優(yōu)點(diǎn):將游戲地圖以塊為單位進(jìn)行管理需要發(fā)送的玩家的信息,服務(wù)器通過(guò)分時(shí)間片段廣播來(lái)分散流量和處理時(shí)間。由于采取了分時(shí)間片段發(fā)送,可以有效防止瞬間產(chǎn)生大量的流量和處理時(shí)間,提高了游戲服務(wù)器的穩(wěn)定性,保證游戲服務(wù)器能穩(wěn)定的提供高質(zhì)量響應(yīng)。由于只在玩家進(jìn)行登陸或者跨塊時(shí)才遍歷并廣播玩家,減少了遍歷次數(shù)和廣播量,有效提升了游戲服務(wù)器性能。由于游戲服務(wù)器通知客戶端刪除離開(kāi)視野的玩家,能有效解決常見(jiàn)的游戲不同步,優(yōu)化玩家體驗(yàn)?!靖綀D說(shuō)明】圖1為本發(fā)明中各數(shù)組的依賴關(guān)系的結(jié)構(gòu)示意圖。圖2為本發(fā)明中玩家登陸時(shí)游戲服務(wù)器進(jìn)行處理的流程示意圖。圖3為本發(fā)明中玩家移動(dòng)時(shí)游戲服務(wù)器進(jìn)行處理的流程示意圖?!揪唧w實(shí)施方式】請(qǐng)參閱圖1至圖3所示,本發(fā)明的一種游戲地圖分時(shí)廣播的方法,將每張游戲地圖進(jìn)行劃分為對(duì)應(yīng)的多個(gè)地圖塊的實(shí)例,并將所述每張游戲地圖對(duì)應(yīng)的多個(gè)地圖塊的實(shí)例在各游戲地圖中分配各自的坐標(biāo)位置,將每張游戲地圖對(duì)應(yīng)的多個(gè)地圖塊的實(shí)例均用一個(gè)二維數(shù)組進(jìn)行存儲(chǔ),該二維數(shù)組的每個(gè)數(shù)組元素的一維下標(biāo)和二維下標(biāo)對(duì)應(yīng)于所述各地圖塊的實(shí)例的坐標(biāo);每個(gè)地圖塊的實(shí)例都設(shè)置有一個(gè)一維數(shù)組1,該一維數(shù)組1用于緩存:需要發(fā)送給新進(jìn)入塊的玩家的其他玩家(其他玩家即新地圖塊中存在的玩家,新進(jìn)入的玩家除外)的ID集合,所述新進(jìn)入塊為從一個(gè)地圖塊的實(shí)例進(jìn)入另一新地圖塊的實(shí)例;所述該一維數(shù)組1緩存的集合的下標(biāo)為新進(jìn)入塊的玩家ID,集合內(nèi)容為另一新地圖塊的實(shí)例內(nèi)的其他玩家ID;每張游戲地圖都設(shè)置有一個(gè)一維數(shù)組2,該一維數(shù)組2用于緩存:進(jìn)入玩家的視野的地圖塊的實(shí)例數(shù)據(jù)集合,所述玩家為剛登陸或者位置改變的玩家;所述該一維數(shù)組2緩存的集合的下標(biāo)為該玩家的ID,集合內(nèi)容為用于索引所述二維數(shù)組的數(shù)組元素的二維下標(biāo);定時(shí)分配給每張游戲地圖一預(yù)設(shè)時(shí)間(即時(shí)間片段)遍歷各游戲地圖的一維數(shù)組2,取出該一維數(shù)組2中有發(fā)生改變地圖塊(級(jí)該地圖塊中的玩家有剛進(jìn)入的,或者離開(kāi)的)的實(shí)例對(duì)應(yīng)的數(shù)組元素;遍歷該數(shù)組元素的集合,根據(jù)集合內(nèi)容從所述二維數(shù)組中索引對(duì)應(yīng)的二維下標(biāo)的地圖塊的實(shí)例;然后根據(jù)該數(shù)組元素的集合的下標(biāo)的玩家ID從索引出的地圖塊的實(shí)例的一維數(shù)組1中取出一定數(shù)量所述其他玩家的集合,所述一定數(shù)量為游戲服務(wù)器預(yù)先設(shè)定的數(shù)量;把這部分其他玩家的數(shù)據(jù)信息發(fā)送給所述該數(shù)組元素的集合的下標(biāo)的玩家,并將取出的其他玩家的集合從一維數(shù)組1中的緩存中刪除;當(dāng)各張游戲地圖遍歷超出分配的預(yù)設(shè)時(shí)間時(shí),主動(dòng)退出,讓出時(shí)間片段。參見(jiàn)圖2,本發(fā)明中玩家登陸時(shí)游戲服務(wù)器進(jìn)行處理的流程示意圖。當(dāng)有剛登陸游戲的玩家時(shí),游戲服務(wù)器根據(jù)記錄該玩家所在游戲地圖和所在位置將玩家加入到二維數(shù)組的游戲地圖對(duì)應(yīng)的地圖塊的實(shí)例中;判斷該玩家周圍是否有可見(jiàn)視野內(nèi)的其他玩家,是,則把該玩家的數(shù)據(jù)信息發(fā)送給周圍的其他玩家,并遍歷該玩家周圍的可見(jiàn)的地圖塊的實(shí)例,將需要發(fā)送給該玩家的其他玩家的集合進(jìn)行緩存到所述一維數(shù)組1中;否,則不做操作;服務(wù)器按預(yù)設(shè)時(shí)間片段來(lái)取出一定數(shù)量所述緩存的其他玩家的數(shù)據(jù)信息,并調(diào)用服務(wù)器的消息模塊把取出的其他玩家的數(shù)據(jù)信息發(fā)送給游戲客戶端進(jìn)行展現(xiàn)。參見(jiàn)圖3,本發(fā)明中玩家移動(dòng)時(shí)游戲服務(wù)器進(jìn)行處理的流程示意圖。當(dāng)有一玩家移動(dòng)時(shí),游戲服務(wù)器判斷該玩家的移動(dòng)是否跨出了當(dāng)前所在的地圖塊的實(shí)例;是跨出,則需要遍歷該玩家周圍的地圖塊的實(shí)例,記錄新增進(jìn)入該玩家視野的地圖塊的實(shí)例,并判斷新增進(jìn)入該玩家視野的地圖塊的實(shí)例中是否有其他玩家,有,則將該部分的其他玩家進(jìn)行緩存到所述一維數(shù)組1中,以供服務(wù)器分時(shí)發(fā)送給游戲客戶端;無(wú)其他玩家,不做操作;遍歷離開(kāi)移動(dòng)玩家視野的地圖塊的實(shí)例,判斷離開(kāi)移動(dòng)玩家視野的地圖塊的實(shí)例內(nèi)是否還存有離開(kāi)塊的玩家,是,則發(fā)送消息通知離開(kāi)塊的玩家的客戶端,從客戶端中進(jìn)行刪除離開(kāi)塊的該塊中離開(kāi)玩家的數(shù)據(jù)信息;未跨出,則不進(jìn)行操作;服務(wù)器按預(yù)設(shè)時(shí)間片段來(lái)取出一定數(shù)量所述緩存的其他玩家的數(shù)據(jù)信息,并調(diào)用服務(wù)器的消息模塊把取出的其他玩家的數(shù)據(jù)信息發(fā)送給游戲客戶端進(jìn)行展現(xiàn)。其中,所述游戲服務(wù)器預(yù)先設(shè)定的數(shù)量是根據(jù)游戲服務(wù)器的狀態(tài)動(dòng)態(tài)獲得的,即當(dāng)游戲服務(wù)器繁忙時(shí)預(yù)先設(shè)定的數(shù)量比游戲服務(wù)器不忙時(shí)預(yù)先設(shè)定的數(shù)量小。總之,本發(fā)明將游戲地圖以塊為單位進(jìn)行管理需要發(fā)送的玩家的信息,服務(wù)器通過(guò)分時(shí)間片段廣播來(lái)分散流量和處理時(shí)間。只在玩家登陸和移動(dòng)跨越區(qū)塊的時(shí)候,才對(duì)周圍玩家進(jìn)行遍歷,以塊為單位緩存需要發(fā)送的玩家,并分時(shí)廣播,每次只發(fā)送定量的玩家。且服務(wù)器能管理玩家的刪除來(lái)避免客戶端與服務(wù)器的不一致。給每個(gè)地圖分配一定的時(shí)間,每個(gè)地圖消耗一定的時(shí)間還沒(méi)處理完玩家的廣播后就中斷此游戲地圖的處理;繁忙的游戲地圖,有些玩家的廣播信息可能會(huì)累積很久,這時(shí)可以考慮丟棄掉。本發(fā)明可以有效改進(jìn)游戲服務(wù)器的安全,提升游戲服務(wù)器的執(zhí)行效率,改進(jìn)玩家的體驗(yàn)。以上所述僅為本發(fā)明的較佳實(shí)施例,凡依本發(fā)明申請(qǐng)專利范圍所做的均等變化與修飾,皆應(yīng)屬本發(fā)明的涵蓋范圍。