1. 程式人生 > >Cocos2dx基礎使用相關面試題

Cocos2dx基礎使用相關面試題

根據上次去面試人家HR所提的一些問題做的整理,答案部分是網上找的,關於基礎使用,大致會問如下幾個問題:
Cocos2d-x的執行流程和基礎物件
Cocos2d-x對相關工具的瞭解
Cocos2d-x其他常見問題
如是如何進行記憶體管理的,所使用的各種設計模式,螢幕適配解決方式

1.Cocos2d-x的執行流程和基礎物件
(1)執行流程
我們知道Cocos2d-x程式的執行順序是從AppDelegate這個類開始,在其中做一些必要的初始化並建立執行第一個場景,之後有一個主迴圈來維持遊戲每一幀的迴圈,並在此期間執行遊戲的相關邏輯。當遊戲結束時,會呼叫導演類的end方法,將會執行遊戲的清理工作,並結束了OpenGL檢視的執行。不同的平臺會有不同的封裝,PC端由OpenGL封裝,移動端則由OpenGLEx,最後退出遊戲程序,結束了整個遊戲的執行。
(2)基礎物件
①導演(Director)
它將提供當前執行所需一切必備的資訊,如幀率,與上一幀間隔的時間;螢幕解析度以及用於迴圈執行的時間表等等,而最重要的功能是管理當前的遊戲場景。導演類將是Cocos2d-x中最關鍵的一個類。
②場景(Scene)
它則主要側重於定義不同場景的用途,如開始介面,遊戲關卡,設定選項介面等等,每一場景都有自己相應的佈景或者角色。但是它往往不直接顯示場景的內容,而將依賴場景中的圖層,每一個場景往往有多個圖層。
③圖層(Layer)
它主要用於佈置場景,如遊戲中遠處的森林和近處的山丘將會使用一個圖層,近處的怪物和英雄可能會使用一個圖層,再近處的一些裝飾和遮擋也會使用一個圖層。甚至一些更加複雜的遊戲,充當背景的圖層還不只一個。如多個背景錯開,還設定上不同的移動速度,可以形成場景的生動效果,從而提升遊戲的吸引力。
④精靈(Sprite)
它和所有顯示物件一樣都繼承與Node物件,它是最最最常用的顯示物件。它可以載入資源圖片並展示在螢幕上,在遊戲或電影裡,精靈就像電影裡的演員;它可以充當玩家控制角色,也可以充當程式控制角色。還有食物,樹木,寶貝等等,都可以用精靈來充當。
⑤動作(Action)
在遊戲中,無論是玩家操作的英雄的各種行為,敵方怪物的各種行為,還是其他怪物的一些變化,基本都是由一些單獨的動作疊加來完成的。如控制精靈的旋轉,移動和縮放,還有一些複雜的物件,如跳遠,貝塞爾曲線和改變顏色等等。

總而言之,一個導演可以管理多個場景,每個場景代表遊戲中的一個關卡或一個介面,一個場景中可以包含多個佈景,有的可能代表背景,有的可能代表前景,背景可能不止一個。一個佈景可以包含多個精靈,精靈可以是玩家控制的英雄,可以是敵方的怪物。精靈根據遊戲情節的需要可以單獨執行某一段動作,連續執行一系列動作,或者執行多個動作,如跑步的同時進行旋轉等等

2.Cocos2d-x對相關工具的瞭解
問:你常用的Cocos2d-x相關的工具有哪些呢?
在這裡我們想到的有Cocos studio,TiledMap,ParticleEditor(粒子編輯器),Flash,PS等等
①Cocos Studio
Cocos Studio是一款功能強大的編輯器,即介面編輯,場景編輯,動畫製作,3D場景編輯,圖集合並等功能為一體,可以快速的釋出資源,可以說是遊戲開發一站式解決方案,運用低成本、高效率;高效能,一次製作,多終端平臺共享的特性;並且它有豐富的外掛,素材庫,使遊戲開發更加靈活更加便捷。
②TiledMap
地圖編輯器,採用的是傳統畫素遊戲所使用的固定方格的拼接方式,可以使用極少的紋理製作豐富的場景,新版本的Cocos2d-x支援老版本TiledMap的菱形格式的地圖。
③ParticleEditor
粒子編輯器,提供了豐富的粒子特效,大部分情況下只需要修改它提供的模板就能達到自己想要的效果,最終可以儲存成*.plist檔案格式,Cocos2d-x對它的支援非常的不錯
④Flash、PS
這就不多說了,這些都是美術必備的軟體,由於Flash製作動畫的功能強大、歷史悠久,使用它製作動畫效率非常高,因此我們常常會使用Flash製作動畫,匯出成cocos2d-x所支援的格式。這樣,我們的動畫不僅製作效率,還與遊戲引擎進行接耦,對不同的平臺,只要做出一個相應的匯出外掛即可

3.Cocos2d-x其他常見問題
①Cocos2d-x是如何進行記憶體管理的?
目前主要有兩種方式實現智慧管理的技術,一種是引用計數,一種是垃圾回收。而Cocos2d-x採用的就是引用計數方式,為此實現了自己的根類(Ref),每一個物件都包含了一個對生命週期控制的引用計數器,建構函式建立時會對該引用計數器賦值為1,這代表沒有實際引用。當要引用物件時,呼叫retain方法,之後引用計數加1;當引用結束時,呼叫release方法,引用計數減1。而autorelease方法會將物件放入一個自動釋放池,實現靈活的垃圾回收。當每一幀結束的時候,自動釋放池的物件就會執行一次release。Create方法將物件加入記憶體池之後,物件的所有權都屬於記憶體池了,我們返回的指標並沒有所有權。而主迴圈幹了一件非常重要的事情:彈出最上層的自動釋放池。之後在release全部此記憶體池中的物件。就是這樣的原理,我們可以放心的將物件放入autorelease的池中,在需要的時候,該物件就能智慧的釋放,同時,在上一級父節點通過addchild向物件獲得所有權之後,就能保證該物件不會被刪除。

②Cocos2d-x中所使用的設計模式
導演類或者圖集快取類,都使用了單例模式,在全域性環境下,他們都只有一個例項。而通知中心,則使用了觀察者模式,如果一個類對某個訊息感興趣,只需要在通知中心中訂閱即可。而Action則使用了裝飾者模式,某些動作之間進行了填充的封裝

③Cocos2d-x的螢幕適配解決方案
Cocos2d-x一共提供了5中螢幕適配解決方案。首先我們來看ExactFit,這種方案會將畫面投射到螢幕上,如果比例不對,就會進行拉伸,一般大部分遊戲是不會使用這種方案的。第二種則是NoBorder,就是沒有黑邊的意思,它的缺點根據比例裁剪掉上下或者左右的畫面。而showall和ExactFit非常相似,只不過不會有拉伸,遇到比例失調的時候保留黑邊,不過它也同樣幾乎不能用,因為現在基本看不到有黑邊的應用。而“固定高度”和“固定寬度”則是3.0新加入的方案,固定高度會根據按一定的高度將畫面裁剪或留白畫面兩邊,這種模式非常常用,一般橫屏的遊戲都會採用這種模式。這樣一來,在編寫程式碼的時候,獲取檢視的大小,將會固定“高度”這個值,會發生改變的值為“寬度”,此時我們的邏輯只需考慮如何適應更加寬的手機螢幕即可。而“固定寬度”模式和“固定高度”正好相反,在豎屏的遊戲中非常常用。