999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于游戲引擎的交互行為控制器研究①

2018-05-04 06:33:44郭向坤
計算機系統應用 2018年4期
關鍵詞:引擎指令按鈕

郝 運, 郭向坤

1(中國科學院大學,北京 100049)

2(中國科學院 沈陽計算技術研究所,沈陽 110168)

由于游戲、仿真等系統的復雜性,在實際的開發過程中需要對系統進行清晰合理的劃分層次[1]. 其中,由于輸入硬件的差異性,可能存在多相與并行的控制命令. 現有的游戲引擎,例如Unity,可以方便的添加與刪除多個控制器,但是往往無法從控制信號的底層來有針對性的進行管理[2]. 我們拓展并改進了目前相對流行的開源游戲引擎cocos2d-x[3],實現了以交互為核心的控制器,明確了實際的原型系統中控制層所處的層次以及和其它層的關系. 提出一種實現方法,該方法具有硬件無關性,保證了指令系統的可擴展性且易于維護,并能在語言層級和運行時層級同時保持實時和高效,為小型游戲、仿真軟件等系統提供了一個合理的控制器方案和框架.

1 系統的主要結構

首先,需要一個外層容器容納游戲整個生命周期中包括控制層的所有層次,且此容器為概念容器,無需被渲染. 結合通用游戲引擎軟件開發的理論及實踐,將具有這樣的特征的容器稱為“場景”,進而把上述容器定義為主場景(MainScene)[4]. 現今,多數的游戲引擎有相同或相似的概念. 在此基礎上,以“層”為單位進行規劃,主場景包含了主層,其余層為主層的子層或級聯子層,構成游戲的框架,如圖1所示.

圖1 系統總體結構

定義了系統邏輯上的關系之后,再圍繞游戲的核心框架定義時序關系. 如圖2所示.

游戲主要部分開始后,首先進行一系列初始化,進而轉入游戲的核心循環. 在核心循環中,需要判斷是否有激活鍵值,即判斷用戶是否發出了指令,對該指令進行即時反饋與處理. 同時,一次次的循環伴隨著時間的流逝,隨著時間的推移,游戲將判斷是否觸發了新的事件,對新事件進行相關的處理,相應地即時刷新游戲狀態[5].

2 系統的設計與實現

框架構成的系統采用MVC模式,并明確在cocos2d-x 3.x引擎中預定義的概念聯系. M(模型)在系統主體實現中可以認為是各個存儲的特定數據,以及節點的物理實體; 而V(視圖)可以認為是我們在可視化編輯器中設計的可視部分,以及各個節點的渲染子層(通常是Sprite類型); C(控制器)可視為M與V中的橋梁,也是控制層中最為關鍵部分.

在移動平臺手機上,觸摸屏幕是操作游戲是基本方式. 所有有效的這一物理操作作用于設備上,經一系列過程輸入給游戲程序,最后都應該得到相應的輸出,即轉化為游戲中對應的實際效果[6].

控制層這個轉化過程中的重要的零件. 控制層在視圖方面顯示了按鈕,此外還作為控制器,控制器本身并不產生輸出或是做具體處理,而是接受用戶的命令并決定是否處理,交由誰處理.

現以觸摸屏幕操作為起點,游戲中對應的實際效果為終點,分析操作是如何一步步在內部轉化的,以介紹了控制層實現模式及其工作原理,定義了控制層的框架和指令數據傳遞路徑,如圖3所示.

圖3 控制器框架與指令傳遞路徑

將給圖中的每一種形式編號,分別稱為階段0,階段1,…,階段N. 以某個按鍵按下為例,闡述階段0是如何推演為階段N的,即在響應狀態下某個抽象按鍵按下這一動作,是如何轉換為游戲中“角色行動”這一實際效果的.

2.1 階段 0→階段 4:控制器前置路徑

(1) 階段0→階段1. 在外部界面設計軟件(如Cocos studio)中所設計的按鈕即是V的典型代表之一.當左鍵按下時,觸摸操作這一物理操作由硬件、操作系統等一系列內部過程交由游戲程序處理. 由于控制層位于最頂層,最后該操作最終作用于在控制層UI視圖上.

(2) 階段 1→階段 2. 控制層 UI視圖是 Cocos studio中制作的,并導出出csb二進制文件,由游戲程序在初始化時導入. 為了使該文件中有關按鈕的二進制數據轉換為游戲程序可以接受的方式,使用如下代碼:

該語句在代碼中定義一個Button指針(即),并使用C++中的static_cast執行非多態的轉換,令指針指向此按鈕,以后以引用的方式使用此按鈕. 系統中存在多個按鈕,可以采用循環的方式進行.

(3) 階段2→階段3. 在控制層初始化過程中,為了接受響應,因此需要注冊偵聽器:

偵聽器的類型有很多種,對應觸摸操作的是觸摸偵聽器(TouchListener). 由此,成功注冊偵聽器,按鈕被點擊后,偵聽器會檢測到該事件,同時調用在注冊偵聽器時所對應的回調函數.

(4) 階段3→階段4. 偵聽器在回調函數中判斷按鈕類型,并通知控制器打開或關閉指令狀態集. 有關函數 void ControlLayer:BtnClick(cocos2d:Ref* pSender,TET touchType)的部分的具體實現如下:

pSender是事件的發出者,這里即指按鈕. 按鈕的name屬性標識著各個不同的按鈕,可由getName()獲得此屬性. 究竟是打開還是關閉需要根據按鍵形式確定,這樣工作由BIN_SWITCH實現.

CMD_ON/CMD_OFF這一對功能模塊用于打開或關閉處于M層級上的指令狀態集. 控制層中控制器的功能可由宏的形式生成分支語句實現,也可以另外實現行為樹或狀態機等常見決策模型做出不同的處理.

2.2 階段 4→階段 7:位變量緩沖器

在上一節中,我們已經實現了控制層的一部分,即階段0→階段4. 然而,指令信息的形式如何以及CMD_ON/CMD_OFF的實現機制,它怎樣影響實際游戲,都是亟待解決的問題.

因此,我們提出了位變量緩沖器,其優點在于用單變量就可以存取多個鍵的鍵值,還能改善游戲性能問題,更有利于識別指令形式,進而目的性地綜合判斷處理. 算法的基本思想描述如下,其中maxPass為當前已分配的通道數:

使用“位變量”的方式在一個int型變量中存儲多個鍵值. 例如,取低16位分析,從低位到高位,每一位分別依次代表一種指令狀態. 如b=0x8888可以代表指令狀態3,7,11,15呈現“開”的狀態,其余“關”的狀態.而c=0x8000僅有第15位為1,即“打開”狀態,我們可以用c這樣的只有對應位為1其余位均為0的通道去判斷b中的指令狀態15是否為打開狀態. 當b&c位運算結果為非零時,c通道的指令為打開狀態. 此外,還可以以移位的形式循環處理指令狀態.

在int類型許可的范圍內,第i個按鈕的對應通道可以表示為(1<

“緩沖”是指CMD_ON/CMD_OFF并不立即調用執行功能函數,而只是將到來的命令緩存起來. 當其大體思想如下:在指令發出時,并不立刻處理這個指令,而是將此指令以一定形式存儲,交由游戲的其它模塊在合理的時機進行一定的處理. 將“這種形式”即稱為指令狀態集,它的作用是識別指令形式和綜合判斷處理. 這樣除了可以改善性能問題之外,還能連續地處理輸出.

游戲核心循環的每一幀的update更新函數中按上述算法檢索緩沖器,實現階段5→階段6的轉換; 當緩沖器打開時,通知相應的層或結點做相應處理,以完成階段6→階段7的最終飛躍.

由于少量修改了cocos2d-x引擎,因此需要將引擎重新編譯,不能當cocos2d-x作為靜態鏈接庫.

3 實驗驗證與分析

為了驗證本文設計的框架在不同壞境下的可靠性和效率,在CPU為ARMv7架構2 GHz主頻,1 GB內存的安卓手機以及CPU為Intel i3-4170,4 GB內存的調試用主機上完成了測試. 測試的目標為一款名為WAYHOME的開源游戲,該游戲使用的原始cocos2dx引擎版本為3.3,分別使用典型的自帶默認控制器(稱為控制器A)和本文的框架下的控制器(稱為控制器B)進行測試.

進行安卓平臺上的測試. 輸入設備是觸摸屏. 該設備最大支持10點觸摸,但游戲所能接受的輸入類型種類為8. 因此,進行了8點同時觸摸測試.

圖4 游戲的GL信息

可以看出該場景下,顯卡繪制的頂點數為3946,渲染次數為18,幀率為59.9 fps. 控制器A和控制器B在正常操作的前提條件下,均不會對游戲性能產生顯著影響.

但是在同時發出8種指令時,情況有所區別. 使用控制器A的游戲畫面出現卡頓,幀率下降到了平均20.24 fps,且游戲中的人物的動作表現不可預見性. 使用控制器B的游戲幀率平均為58.7 fps,在誤差允許范圍內,可以認為沒有影響. 此外,游戲中的人物的表現有符合語義的相對確定性. 例如,“左”和“右”同時按下時,根據矢量相加的“意圖”,人物在沒有外力干涉時應保持靜止. 控制器A時而左行,時而右行,而控制器B大多數情況下保持了靜止. 可見,控制器B有一定的優勢.

4 結語

本文研究并給出了一種基于游戲引擎的控制器框架. 首先分析設計了框架所構成系統的基本結構,指出了控制層所處的位置以及和其它層方面的邏輯關系.然后,圍繞系統的核心循環,分析設計了系統的時序關系. 由硬件底層出發,在語言和視圖的級別追蹤和注冊了傳遞控制指令. 通過位變量來儲存和管理命令意圖,避免了復雜引用且對程序員在邏輯層面友好,同時保證了高效率. 通過通道的方式來緩沖輸入,保證在復雜并行輸入的同時保持程序的實時穩定性. 最后,在實際的開源游戲中應用了該框架,測試結果表明,相對于原有的默認控制器,該框架更利于穩定幀率、降低輸入延遲以及在極端情況下保證系統的穩定性和表現方面更加符合自然語義.

1 Soni B,Hingston P. Bots trained to play like a human are more fun. Proceedings of the 2008 IEEE International Joint Conference on Neural Networks (IEEE World Congress on Computational Intelligence). Hong Kong,China. 2008.363-369.

2 徐盼欣. Unity 4.x從入門到精通. 北京:中國鐵道出版社,2013.

3 周飛龍. Cocos2d-X引擎中MVC框架的設計與實現[碩士學位論文]. 武漢:華中科技大學,2013.

4 Wong M,IBM XL編譯器中國開發團隊. 深入理解C++ 11:C++ 11新特性解析與應用. 北京:機械工業出版社,2013.

5 朱成亮. 基于Android平臺游戲引擎的設計與實現[碩士學位論文]. 淮南:安徽理工大學,2011.

6 張萌. 基于動作軌跡識別的游戲控制系統設計[碩士學位論文]. 重慶:重慶大學,2013.

猜你喜歡
引擎指令按鈕
這些按鈕能隨便按嗎?
聽我指令:大催眠術
當你面前有個按鈕
ARINC661顯控指令快速驗證方法
測控技術(2018年5期)2018-12-09 09:04:26
LED照明產品歐盟ErP指令要求解讀
電子測試(2018年18期)2018-11-14 02:30:34
藍谷: “涉藍”新引擎
商周刊(2017年22期)2017-11-09 05:08:31
無形的引擎
河南電力(2015年5期)2015-06-08 06:01:46
基于Cocos2d引擎的PuzzleGame開發
內心不能碰的按鈕
商業評論(2014年9期)2015-02-28 04:32:41
坐標系旋轉指令數控編程應用
機電信息(2014年27期)2014-02-27 15:53:56
主站蜘蛛池模板: 国产成人综合久久精品下载| 中文天堂在线视频| 又爽又大又光又色的午夜视频| 成人毛片在线播放| 免费又爽又刺激高潮网址| 99精品国产电影| 精品三级网站| 免费看美女毛片| 欧美区一区二区三| 色偷偷男人的天堂亚洲av| 女同国产精品一区二区| 国产手机在线观看| 成人精品视频一区二区在线| 亚洲an第二区国产精品| 日韩视频免费| 四虎永久在线| 成人无码区免费视频网站蜜臀| 欧美日韩亚洲综合在线观看 | 无码精品福利一区二区三区| 亚洲另类国产欧美一区二区| 久久免费精品琪琪| 亚洲成人高清在线观看| 中文字幕人成人乱码亚洲电影| 蜜芽一区二区国产精品| 婷婷色一二三区波多野衣| 精品一区二区三区中文字幕| 亚洲国产在一区二区三区| 国产精品久久久久久久久久98| 国产第一页屁屁影院| 91麻豆精品国产高清在线| 国产免费自拍视频| 日韩精品一区二区三区swag| 国产综合无码一区二区色蜜蜜| 久久亚洲天堂| 久久综合结合久久狠狠狠97色| 精品国产黑色丝袜高跟鞋| 九月婷婷亚洲综合在线| 伊人久久大香线蕉影院| 国产精品久久久久久搜索| 国产在线精彩视频二区| 欧美日韩在线成人| 久久精品国产精品青草app| 国产高清免费午夜在线视频| 久久精品视频亚洲| 99久久国产综合精品2020| 亚洲人成电影在线播放| 国产迷奸在线看| 免费人欧美成又黄又爽的视频| 大陆国产精品视频| 免费看av在线网站网址| 亚洲高清中文字幕| 国产熟女一级毛片| 亚洲精品视频网| 久久久久国产精品嫩草影院| 综合色天天| 人妻一区二区三区无码精品一区| 亚洲第一网站男人都懂| 成年人国产网站| 中国成人在线视频| 国产h视频在线观看视频| 亚洲a级在线观看| 中文字幕无码av专区久久 | 国产成+人+综合+亚洲欧美 | 日韩精品亚洲一区中文字幕| 一级一级一片免费| 在线欧美一区| 看av免费毛片手机播放| 国产日本一区二区三区| 伊在人亚洲香蕉精品播放| 99热这里只有精品2| 久久精品人妻中文视频| 亚洲成人免费看| 国产成人亚洲精品蜜芽影院| 国产精品久久久久久影院| 一区二区三区四区精品视频 | 国产午夜人做人免费视频| 无码免费的亚洲视频| 国产中文在线亚洲精品官网| 国产精品所毛片视频| 永久在线播放| 免费激情网址| 黑人巨大精品欧美一区二区区|