我使用的版本是cocos2d-2.0-x-2.0.4,cocos2dx-2.0版本對多分辨率适配提供了很好的支援,使用起來比1.0版本要簡單些,1.0版本的适配可以參考這篇博文。
1. 做2.0版本的适配首先需要了解下面這些知識。
(1)适配政策
2.0版本提供了三種适配政策:
kResolutionNoBorder:超出螢幕的部分會被裁剪,兩側沒有黑邊,鋪滿螢幕,按圖檔原始比例顯示,圖檔不變形。
kResolutionShowAll:整個遊戲界面是可見的,會按原始比例進行縮放,圖檔不變形,但兩側可能會留有黑邊,不鋪滿螢幕。
kResolutionExactFit:整個遊戲界面是可見的,圖檔可能會進行拉伸或者壓縮處理,鋪滿螢幕,圖檔會變形。
可以根據自己的要求選擇。
(2)VisibleSize和VisibleOrigin
getVisibleSize:表示獲得視口(可視區域)的大小,如果DesignResolutionSize跟螢幕尺寸一樣大,則getVisibleSize等于getWinSize。
getVisibleOrigin:表示可視區域的起點坐标,這在處理相對位置的時候非常有用,確定節點在不同分辨率下的位置一緻。
(3)DesignResolutionSize
DesignResolutionSize是一個比較重要的概念,其實2.0版本的适配跟1.0版本原理差不多,都是按比例進行縮放。這個DesignResolutionSize表示設計方案,就是你的遊戲完美支援的分辨率方案,一般根據圖檔資源的尺寸來定,自适配時會按照這個分辨率計算出縮放因子。是以,這個值也應該是動态的,如果是橫屏遊戲則高度肯定是鋪滿螢幕的,寬度也要盡可能的鋪滿螢幕,是以應該選擇寬高比最大的作為設計分辨率,下面的demo會給出使用方法。
(4)設定相對位置
在遊戲中使用相對位置設定坐标的好處是顯而易見的,這樣就不需要為每個分辨率都定義一套坐标了。首先得定義一些參考點,引擎的TestCpp例子中就提供了一種方法,以螢幕上可視區域的9個點作為參考點,相當于在該矩形内寫一個米字,這9個點分别是:左上、左、左下、下、右下、右、右上、上、中心。
2. 下面來實作一個簡單的demo,首先建立一個win32工程,這個就不詳述了。
(1)建立一個AppMacros.h檔案,定義了一些宏,源碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | |
(2)接下來修改AppDelegate.cpp檔案的applicationDidFinishLaunching函數,添加以下代碼:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | |
(3)建立VisibleRect.h和VisibleRect.cpp檔案,封裝了擷取那9個點坐标的函數,比較簡單。代碼如下:
VisibleRect.h
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | |
VisibleRect.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | |
(4)修改HelloWorldScene.cpp的init函數,使用相對位置設定坐标。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | |
(5)建立視窗,main.cpp的主要内容:
1 2 3 4 5 6 7 8 9 10 11 12 | |
OK,到此為止,代碼部分已經完成了,下面看看在各種分辨率和不同政策下的效果圖:
1. kResolutionShowAll政策:
(1)2048×1536
(2)1024×768
(3)480×320
(4)800×480
(5)1280×800
(6)960×640
2. kResolutionExactFit政策
1280×768分辨率
3. kResolutionNoBorder政策
1280×768分辨率