Cocos2d x 多解析度支援

2021-06-18 01:16:43 字數 2809 閱讀 6753

最近遇到多解析度支援問題,所以查了一些資料。將一些收穫共享一下,以便自己和其他需要的朋友日後參考。

如果我要建立乙個cocos2d-x專案,我的目標是支援iphone3g( 480, 320 ),iphone4/4s( 960, 640 ), iphone5( 1136, 640 ),ipad1/2( 1024, 768 ),ipad 3( 2048, 1536 ),以及所有android裝置(其解析度可能是( 800, 480 )等其它各種解析度)?我該如何規劃呢?但在你規劃之前是否清楚cocos2d-x是如何為多解析度支援進行設計的?

所以首先來看一下,cocos2d-x提供的基本支援。

cocos2d-x自從2.0.2版本起,不在採用-hd,-ipd,-ipdhd等檔名稱字尾了,因為其目標是支援是跨平台,不再是單單ios系統了。改用ccfileuti類中的setresourcedirectory()(2.0.4版本)或者setsearchpaths()(2.1.1版本)。我們只需在resource目錄下為每個系統建立自己的目錄,並將對應資源放進去(具體參考

)。cocos2d-x自從2.0.4版本起,去除了setretinaenable()函式,因為cocos2d-x將預設開啟retina(如果裝置支援的話),並帶來了全新的概念。你需要理解designsize和contentscalefactor,以及designsize將如何對映到視窗上。我簡單解釋一下:

1.designsize:從字面意思就是設計大小。「設計」兩字為何意?好比我們拋開不同裝置解析度,就假定只有乙個標準介面,讓標準介面隱藏背後不同裝置的差異。這個標準介面就是designsize。cocos2d-x也將向標準介面「看齊」,   一旦我們設定了designsize,cocos2d-x中的getwinsize就成了我們的designsize。我們一般設定其為(480,320)「經典」大小,但假如你的初始資源是(1024,768)大小的,那麼我們可以使用(512,384)的設計介面,保證資源的寬高比和設計寬高比相同,能保證資源全屏。

2.contentscalefactor:從字面意思內容縮放因子,內容即我們的資源(我是這麼理解的)。一般contentscalefactor = resourceheight / designsize.height;為什麼要有這個東西?因為剛才我們說了designsize,我們將其設定為(480,320),而且以後我們的winsize就成了designsize,但是我們用在iphone4中背景還是(960,640)的,此時我們的是螢幕4倍大,就顯示不開了。有了縮放因子,我們就能將背景(960,640)的程式設計(480,320)。這樣原本全屏的資源,現在仍然是全屏的。

3.designsize如何對映到「真實視窗」上的:這個過程就是將我們的」標準介面「對映到真實的裝置上。我們真實裝置的大小可能有很多變化。(480,320)的設計介面如何對映到,假如說(1136,640)的呢?有三種kresourceexactfit,kresourcenoborder,kresourceshowall。

第一種是完全適應,即不論你真是裝置解析度多麼」怪異「,它都將設計介面恰好的貼上去。看似」完美「的方案,但也存在瑕疵,那就是變形。你的人物可能」變

胖「,或者」拉瘦「。

第二種是沒邊界,即沒有邊界限制,假如你的」設計介面「是(480,320),目標裝置是(1136,640)。如果目標裝置的長寬比率和設計介面的長寬比率不一

樣,那麼這個模式採用超出目標裝置邊界的拉伸方式,也就是設計介面有一邊完全適應,另一邊超出的方式。在我們當前假設的這種情況,那就是會將設計界

面的寬拉伸到1136.然後高等比放大。這樣的話,我們會發現,寬正好」全屏「,但是高超出去。這也就是所謂了沒有邊界限制的」好處「。

第三種是全顯示,即全部顯示,假如你的」設計介面「是(480,320),目標裝置是(1136,640)。那麼這種模式會保證你的設計介面一定能全部顯示。也就

是說,如果目標裝置的長寬比率和設計介面的長寬比率不一樣,那麼這個模式採用限制到目標裝置邊界的拉伸方式。在我們當前假設的這種情況,那就是會將

設計介面的高拉伸到640.然後寬等比放大。這樣的話,我們會發現,高正好」全屏「,但是寬被」擠「了(在兩邊留有黑邊)。這也就是所謂了全部顯示的」好處「。

(具體參考

另外cocos2d-x有個「詭異」的特點(至少在cocos2d-x 2.1.1版本),那就是當你開啟【iphone retina 4-inch】的時候,如果你沒有設定啟動封面,那麼winsize仍將是(960,640)。所以必須設定啟動封面,才能得到winsize(1136,640)。

知道cocos2d-x對過解析度的支援後,我們就更加能理解好自己專案要怎樣才能支援多解析度。如果你用到cocosbuilder(如果你還不會使用,就請參考本人的【cocosbuilder教程系列

】),那麼如何讓cocosbuilder也支援多解析度呢?

因為cocosbuilder的檔案讀取庫(即ccbreader讀取ccbi檔案),也是使用cctexture來載入的,所以我們前面講到的目錄搜尋規則也會自動被使用到ccbi的檔案載入中去。雖然cocosbuilder有跟cocos2d一樣的的承諾「-hd,-ipd,-ipdhd",但這些在cocos2d-x作用已經失效。

由於我們面向多解析度,所以我們一定在cocosbuilder中使用百分比模式來設定座標和大小。否則,你設定的座標就不會自動適應對應的裝置解析度。例如:你設定乙個登陸框,你不應該將其座標設定為(512,384),因為這個座標在(480,320)的iphone3g或者android裝置,可能直接看不到,而且和其他元素之間的相對距離也就混亂不堪。所以使用百分比(50%,50%),能保證在任何裝置上都是居中的。

通過上面講述,你應該能找到自己的多解析度支援解決方案。一套資源也好,兩套,三套都可以,主要還是看每個遊戲自己的需求。

Cocos2d x 多解析度適配完全解析

2 五種適配模式 從上面的講解我們可以了解到,setframesize 是設定了視窗大小 即螢幕的實際大小 而這個引數只是為了我們開發時作為模擬參照,在實際手機上執行時,手機的螢幕大小是我們無法設定的。而螢幕適配的關鍵在於setdesignresolutionsize 通過它來設定可視區域的解析度以...

Cocos2d x塔防遊戲 多解析度適配完全解析

cocos2d x作為跨平台的遊戲引擎,適配基本所有的手持裝置,而開發者最頭疼的多解析度適配,在開發cocos2d x遊戲的時候已經被遊戲引擎完美解決。height 498 width 510 src frameborder 0 allowfullscreen 課程筆記 如何自動匹配解析度 在發布之...

cocos2d x 適應不同解析度

相同平台不同解析度 ccfileutils setsearchresolutionsorder 支援檔案分布策略,你可以像如下一樣查詢設定路徑 std vectorresdirorders resdirorders.push back ipadhd resdirorders.push back ip...