雙引擎游戲內(nèi)置工具欄的方法、裝置及終端的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及游戲顯示處理技術(shù)領(lǐng)域,尤其涉及一種雙引擎游戲內(nèi)置工具欄的方法、裝置以及終端。
【背景技術(shù)】
[0002]直播內(nèi)置工具欄是一種由外部直播客戶端注入到游戲進(jìn)程內(nèi),將工具欄界面顯示在游戲畫面上,方便玩家在游戲過程中控制直播,查看直播信息的直播技術(shù)。
【發(fā)明內(nèi)容】
[0003]經(jīng)工程測試研究發(fā)現(xiàn),目前業(yè)界的直播內(nèi)置工具欄都是內(nèi)置于單引擎架構(gòu)的游戲中。但是對于日漸流行的雙引擎架構(gòu)的游戲來說,目前還沒有對應(yīng)的雙引擎游戲內(nèi)置工具欄的技術(shù),能夠使游戲在兩個游戲引擎之間切換時,工具欄也可以和游戲一樣平滑切換,使玩家的操作不會受切換過程的影響,也不會感覺到工具欄發(fā)生變化。
[0004]為實(shí)現(xiàn)在雙引擎架構(gòu)的游戲中內(nèi)置直播工具欄,我們提出了一種雙引擎游戲內(nèi)置工具欄的技術(shù),當(dāng)游戲在兩個游戲引擎之間切換時,工具欄也可以和游戲一樣平滑切換,使玩家的操作不會受切換過程的影響,也不會感覺到工具欄發(fā)生變化。
[0005]為實(shí)現(xiàn)上述目的,本發(fā)明提供一種雙引擎游戲內(nèi)置工具欄的方法、裝置及終端,能夠?qū)⒐ぞ邫趦?nèi)置到雙引擎架構(gòu)的游戲中,并且當(dāng)游戲在兩個游戲引擎之間切換時,工具欄也可以和游戲一樣平滑切換。
[0006]本發(fā)明實(shí)施例提供了一種雙引擎游戲內(nèi)置工具欄的方法,包括:
[0007]在游戲進(jìn)程運(yùn)行時,實(shí)時檢測工具欄進(jìn)程的當(dāng)前狀態(tài);
[0008]當(dāng)檢測到當(dāng)前工具欄畫面已保存到游戲進(jìn)程的共享內(nèi)存時,從所述共享內(nèi)存中讀取所述當(dāng)前工具欄畫面到讀寫緩存模塊中;其中,所述當(dāng)前工具欄畫面為通過工具欄進(jìn)程渲染后,通過進(jìn)程間通信方式進(jìn)入游戲進(jìn)程的讀寫緩存交換模塊,從而寫入所述共享內(nèi)存中的;
[0009]根據(jù)當(dāng)前運(yùn)行為2D游戲引擎或3D游戲引擎,調(diào)用對應(yīng)的2D游戲引擎貼圖流程或3D游戲引擎貼圖流程,以將所述讀寫緩存模塊中的當(dāng)前工具欄畫面繪制到當(dāng)前游戲畫面上。
[0010]作為上述方案的改進(jìn),所述在游戲進(jìn)程運(yùn)行時,實(shí)時檢測工具欄進(jìn)程的當(dāng)前狀態(tài)具體為:
[0011]在游戲進(jìn)程運(yùn)行時,通過實(shí)時檢測游戲進(jìn)程與工具欄進(jìn)程之間創(chuàng)建的匿名管道中的狀態(tài)ID來確定工具欄進(jìn)程的當(dāng)前狀態(tài);其中,所述狀態(tài)ID由工具欄進(jìn)程生成并送入所述匿名管道中。
[0012]作為上述方案的改進(jìn),若工具欄啟動,所述工具欄進(jìn)程生成的狀態(tài)ID為1 ;
[0013]若當(dāng)前工具欄畫面生成并寫入所述共享內(nèi)存中,所述工具欄進(jìn)程生成的狀態(tài)ID為2 ;
[0014]若工具欄關(guān)閉,所述工具欄進(jìn)程生成的狀態(tài)ID為3。
[0015]作為上述方案的改進(jìn),若實(shí)時檢測所述匿名管道中的狀態(tài)ID為1時,則對2D游戲引擎貼圖流程和3D游戲引擎貼圖流程進(jìn)行初始化。
[0016]作為上述方案的改進(jìn),對2D游戲引擎貼圖流程進(jìn)行初始化具體包括:
[0017]通過API HOOK技術(shù),對2D游戲引擎原繪制流程進(jìn)行修改,在繪制游戲畫面前先跳轉(zhuǎn)到執(zhí)行工具欄畫面的繪制,并在工具欄畫面繪制完畢后再跳轉(zhuǎn)回去執(zhí)行游戲畫面的繪制,從而得到所述2D游戲引擎貼圖流程。
[0018]作為上述方案的改進(jìn),對3D游戲引擎繪圖流程進(jìn)行初始化具體包括:
[0019]通過API HOOK技術(shù),對3D游戲引擎原繪制流程進(jìn)行修改,在繪制游戲畫面前先跳轉(zhuǎn)到執(zhí)行工具欄畫面的繪制,并在工具欄畫面繪制完畢后再跳轉(zhuǎn)回去執(zhí)行游戲畫面的繪制,從而得到所述3D游戲引擎貼圖流程。
[0020]作為上述方案的改進(jìn),所述2D游戲引擎原繪圖流程通過IDirectDrawSurface7::Unlock函數(shù)來實(shí)現(xiàn)游戲畫面的繪制;
[0021]所述3D游戲引擎原繪圖流程通過IDirect3DDevice9::Present函數(shù)來實(shí)現(xiàn)游戲畫面的繪制。
[0022]作為上述方案的改進(jìn),若當(dāng)前調(diào)用的函數(shù)為IDirectDrawSurface7::Unlock,貝lj判斷當(dāng)前運(yùn)行為2D游戲引擎;
[0023]若當(dāng)前調(diào)用的函數(shù)為IDirect3DDevice9::Present,則判斷當(dāng)前運(yùn)行為3D游戲引擎。
[0024]作為上述方案的改進(jìn),若實(shí)時檢測所述匿名管道中的狀態(tài)ID為2時,則從所述共享內(nèi)存中讀取所述當(dāng)前工具欄畫面到讀寫緩存模塊中。
[0025]作為上述方案的改進(jìn),若實(shí)時檢測所述匿名管道中的狀態(tài)ID為3時,則清理所述寫緩存模塊中的工具欄畫面。
[0026]作為上述方案的改進(jìn),將當(dāng)前工具欄畫面繪制到當(dāng)前游戲畫面上具體為:
[0027]將所述當(dāng)前工具欄畫面進(jìn)行透視化處理后呈現(xiàn)在所述當(dāng)前游戲畫面上。
[0028]作為上述方案的改進(jìn),所述工具欄進(jìn)程為直播工具欄進(jìn)程。
[0029]作為上述方案的改進(jìn),所述在游戲進(jìn)程運(yùn)行時,實(shí)時檢測工具欄進(jìn)程的當(dāng)前狀態(tài)具體為:
[0030]在游戲進(jìn)程運(yùn)行時,以預(yù)設(shè)頻率實(shí)時檢測工具欄進(jìn)程的當(dāng)前狀態(tài)。
[0031]本發(fā)明實(shí)施例對應(yīng)提供了一種雙引擎游戲內(nèi)置工具欄的裝置,包括:
[0032]檢測模塊,用于在游戲進(jìn)程運(yùn)行時,實(shí)時檢測工具欄進(jìn)程的當(dāng)前狀態(tài);
[0033]工具欄畫面讀取模塊,用于當(dāng)檢測模塊檢測到當(dāng)前工具欄畫面已保存到游戲進(jìn)程的共享內(nèi)存時,從所述共享內(nèi)存中讀取所述當(dāng)前工具欄畫面到讀寫緩存模塊中;其中,所述當(dāng)前工具欄畫面為通過工具欄進(jìn)程渲染后,通過進(jìn)程間通信方式進(jìn)入游戲進(jìn)程的讀寫緩存交換模塊,從而寫入所述共享內(nèi)存中的;
[0034]工具欄畫面繪制模塊,用于根據(jù)當(dāng)前運(yùn)行為2D游戲引擎或3D游戲引擎,調(diào)用對應(yīng)的2D游戲引擎貼圖流程或3D游戲引擎貼圖流程,以將所述讀寫緩存模塊中的當(dāng)前工具欄畫面繪制到當(dāng)前游戲畫面上。
[0035]作為上述方案的改進(jìn),所述檢測模塊進(jìn)一步用于:
[0036]在游戲進(jìn)程運(yùn)行時,通過實(shí)時檢測游戲進(jìn)程與工具欄進(jìn)程之間創(chuàng)建的匿名管道中的狀態(tài)ID來確定工具欄進(jìn)程的當(dāng)前狀態(tài);其中,所述狀態(tài)ID由工具欄進(jìn)程生成并送入所述匿名管道中。
[0037]作為上述方案的改進(jìn),所述工具欄進(jìn)程生成的狀態(tài)ID為1時表示工具欄啟動;
[0038]所述工具欄進(jìn)程生成的狀態(tài)ID為2時表示當(dāng)前工具欄畫面生成并寫入所述共享內(nèi)存中;
[0039]所述工具欄進(jìn)程生成的狀態(tài)ID為3時表示工具欄關(guān)閉。
[0040]作為上述方案的改進(jìn),所述裝置還包括初始化模塊,用于若所述檢測模塊實(shí)時檢測游戲進(jìn)程的輸入管道中的狀態(tài)ID為1時,則對2D游戲引擎貼圖流程和3D游戲引擎貼圖流程進(jìn)行初始化。
[0041]作為上述方案的改進(jìn),所述初始化模塊對2D游戲引擎貼圖流程進(jìn)行初始化操作包括:
[0042]通過API HOOK技術(shù),對2D游戲引擎原繪制流程進(jìn)行修改,在繪制游戲畫面前先跳轉(zhuǎn)到執(zhí)行工具欄畫面的繪制,并在工具欄畫面繪制完畢后再跳轉(zhuǎn)回去執(zhí)行游戲畫面的繪制,從而得到所述2D游戲引擎貼圖流程。
[0043]作為上述方案的改進(jìn),所述初始化模塊對3D游戲引擎繪圖流程進(jìn)行初始化操作包括:
[0044]通過API HOOK技術(shù),對3D游戲引擎原繪制流程進(jìn)行修改,在繪制游戲畫面前先跳轉(zhuǎn)到執(zhí)行工具欄畫面的繪制,并在工具欄畫面繪制完畢后再跳轉(zhuǎn)回去執(zhí)行游戲畫面的繪制,從而得到所述3D游戲引擎貼圖流程。
[0045]作為上述方案的改進(jìn),所述2D游戲引擎原繪圖流程通過IDirectDrawSurface7::Unlock函數(shù)來實(shí)現(xiàn)游戲畫面的繪制;
[0046]所述3D游戲引擎原繪圖流程通過IDirect3DDevice9::Present函數(shù)來實(shí)現(xiàn)游戲畫面的繪制。
[0047]作為上述方案的改進(jìn),所述裝置還包括判斷模塊,用于:若當(dāng)前調(diào)用的函數(shù)為IDirectDrawSurface7::Unlock,貝lj判斷當(dāng)前運(yùn)行為2D游戲引擎;
[0048]若當(dāng)前調(diào)用的函數(shù)為IDirect3DDevice9::Present,則判斷當(dāng)前運(yùn)行為3D游戲引擎。
[0049]作為上述方案的改進(jìn),若所述檢測模塊實(shí)時檢測游