天天看點

Cocos2d-x 多分辨率支援

最近遇到多分辨率支援問題,是以查了一些資料。将一些收獲共享一下,以便自己和其他需要的朋友日後參考。

如果我要建立一個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.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)。

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

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

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

繼續閱讀