適配方法有以下三種,這裏我只分析一下第三種
(1)kResolutionExactFit
(2)kResolutionShowAll
(3)kResolutionNoBorder
if(!glview) {
glview = GLView::create("My Game");
director->setOpenGLView(glview);
}
這是適配後的代碼
If(!glview)
{
glview=GLView::createWithRect(“MY GAME”,Rect(0,0,480,640));
director->setOpenGLView(glview);
glview->setDesignResolutionSize(480,320 ,kResolutionNoBorder );
}
(1) glview=GLView::createWithRect(“MY GAME”,Rect(0,0,480,640));
創建一個名爲MY GAME且寬和高尺寸分別爲480和640的win32窗口,其實就是將來的手機屏幕大小。
(2) glview->setDesignResolutionSize(480,320 ,kResolutionNoBorder );
設置分辨率,kResolutionNoBorder是你設置的分辨率爲適配顯示器屏幕大小尺寸的一種方法,即指以480,320的分辨率適應480,640的屏幕大小。適應方法是寬和高等比放大或縮小,由給出的分辨率可知分辨率寬480正好1:1適配屏幕寬480,但分辨率高320卻是1:2沒有適配屏幕高640,也就是說在屏幕高640的尺寸大小上有320個像素點,而在屏幕寬480的尺寸大小上有480個像素點,這顯然是不符合kResolutionNoBorder這種適配方法的規定(寬高等比放大或縮小),
有兩種伸縮方案如下:
(1)屏幕寬和給出的寬像素點的比例不變
按照屏幕寬480按1:1的比例適配480個像素點,那麼剩下的就應該讓屏幕高640按1:1的比例適配640個像素點,
但問題是在現在系統只給了320個像素點,沒法額外增加像素點,所以這種適配方法pass,這時你會這麼想:當時要是多定義幾個像素點該多好啊,我想用多少就從中拿出多少像素點,就不會出現像素點不夠屏幕尺寸分配的情況了,所以就誕生了下面的適配方法。
(2)屏幕高和給出的高像素點的比例不變
如上所述,屏幕高尺寸620上按比例2:1分配320個像素點,相應的屏幕寬480上按比例2:1應該分配240個像素點,這就滿足了kResolutionNoBorder這種適配方法的規定(寬高等比放大或縮小),即比例都是2:1 。而實際系統給了480個像素點,這時我們只需從中拿出我們需要的240個像素點就行了,其他的像素點你不用管,讓它們留在屏幕寬外邊就行了。
所以接踵而至的問題又來了,
這時,屏幕的原點(左下角)座標(0,0)與適配後的分辨率原點座標也已不是一一對應的關係了,並且屏幕的寬高尺寸和分辨率的寬高尺寸也不是一一對應了,所以這時需要調用以下函數來獲取上述值
以下是獲取相應的值得代碼
Size visibleSize = Director::getInstance()->getVisibleSize();
//通過獲得在win32窗口的長寬尺寸大小下適配的相應的像素點數目,從而得到適配後的顯示在窗口中的寬高尺寸大小
Vec2 origin = Director::getInstance()->getVisibleOrigin()
//得到屏幕原點(左下角)的座標
以下是經測試得到的數據
visibleSize.width=240 visibleSize.height=320
origin.x=120 origin .y=0
注意這裏,我並沒有添加任何背景圖層,所以win32窗口尺寸大小適配分辨率尺寸大小後的關係是看不到的。下圖是自己做的尺寸大小關係圖
如圖 黑框部分是win32窗口(480,640),紅框是適配分辨率後的窗口(480,320)但其實你是看不到黑框以外的那一部分的,這裏爲了能更好的理解他們之間的關係,所以我就把沒有顯示的那一部分也畫出來了。
上圖中關係是:黑框的寬(尺寸)480對應240個像素點,黑框的高(尺寸)640對應320個像素點。
黑框左下角的座標爲(120,0),右上角座標(360,320)
紅框左下角的座標(0,0), 右上角座標(480,320)(紅框的這兩個座標你是看不到的)
這裏就可以看出來,所有的座標與win32窗口的尺寸大小沒有任何關係了,更確切的說與將來手機的屏幕大小沒有關係了,即達到了適配效果。
還有,你接下的所有操作都是建立在適配的座標下,與win32窗口(480,640)尺寸大小沒有任何聯繫。比如隨便找個座標(240,320),你猜這個座標的位置在哪?
還是你以爲的窗口正中間嗎?顯然不是。他在黑框的上邊框的中間。
到這兒,你就可以推算出其他兩種適配方法的座標關係了。
新手才淺,哪兒說的不對,往指導。