cocos2d 屏幕適配_cocos2d-x 2.x屏幕适配基础
一開始我就忽略了屏幕適配的問題,現在才發現它是多么的重要。通過實踐才領悟了其基礎概念,而屏幕適配的策略是建立在其上的,有很多,但我還沒有認真研究。這里僅把自己對屏幕適配基礎知識進行一個梳理。
關于屏幕適配,有一個基礎單位:像素。像素構成了分辨率,不應該把分辨率理解為大小。因此這里不說大小,只說分辨率;不說長寬,只說橫縱。
1.FrameSize
這個最好理解,就是設備的分辨率,不同的手機有不同的分辨率。事實上,在PC上面開發也有一個設備分辨率,那就是在main.cpp里面設置的窗口分辨率,這個窗口應該理解為設備。因此不必在手機上模擬屏幕適配策略,在PC模擬上就足夠了。通過:
CCEGLView::sharedOpenGLView()->getFrameSize();
就可以得到設備的分辨率,它是屏幕適配的基礎。注意,設備分辨率一定是動態變換的,根據不同設備能獲得不同的值。
2.winSize
很多教程中把它說成是設計分辨率,也許很恰當,但是我感覺不太好理解。我把它叫做游戲分辨率。它就像是一個畫布,必須附著在畫板上面,這個畫板就是設備屏幕。如果不手動設置的話,其默認值就和程序入口時設置的設備分辨率一樣。所以,在PC上開發,默認情況下游戲的分辨率和窗口分辨率是一定保持一致的,但由于不同平臺程序入口不一致(不是引擎入口),放到手機上就會出現不適配的情況了。游戲分辨率和設備分辨率是不同的概念,是兩碼事。
我們需要手動設置winSize,手動設置winSize,就是所謂的屏幕適配。在后文詳述。
3.visibleSize
我還是覺得其它教程對它的描述模糊不清。我把它叫做可見游戲分辨率。什么叫可見游戲分辨率?就像一張大畫布,大過了所依附的畫板,會多出去一些布料,無論如何,這張畫布都是游戲分辨率。但是只有處在畫板內部的那部分畫布,才能算作可見游戲分辨率(只是個比方,其實出現這種情況,visibleSize還是要大于frameSize的)。visibleSize就是顯示于FrameSize里面的winSize。關于這個概念點,我的描述還是不很精當。不過只要理解了winSize就行,visibleSize就是winSize的子集。
接下來就可以來分析引擎提供的屏幕適配方案了。
有意思的是,引擎把設置游戲分辨率(winSize)和適配參數放在了一個接口里面:pEGLView->setDesignResolutionSize(float width, float height, ResolutionPolicy resolutionPolicy)
適配參數有5個可用值,ShowAll, NoBorder, ExactFit并沒有改變游戲分辨率,只是通過一個比例獲得了一個新的分辨率,我把它叫做實際游戲分辨率,這才是呈現給玩家的真實游戲分辨率。雖然它原則上必須跟設備分辨率一致,但還是兩碼事。剩下的兩個參數是FixedHeight和FixedWidth,它們用來修改游戲分辨率,也就是改動了winSize,保證了winSize的橫縱比例與FrameSize的橫縱比例一致。我做了張圖表,表示其效果。
橫(像素)
縱(像素)
效果
設備分辨率(frameSize)
640
960
游戲分辨率(winSize)
720
1200
ratio(設備/游戲)
0.888888889
0.8
實際分辨率(winSize)
ShowAll
576
960
根據小ratio計算實際分辨率,左右出現黑邊(圖1)
NoBorder
640
1067
根據大ratio計算實際分辨率,上下超出屏幕(圖2)
ExactFit
640
960
出現拉伸
FixedHeight
640
960
根據frameSize的橫縱比,改變winSize寬為800
FixedWidth
640
960
根據frameSize的橫縱比,改變winSize高為1080
再舉兩個圖例:
ShowAll:
NoBorder:
紅色框框表示的范圍就是實際分辨率,即真實的游戲分辨率??梢钥吹皆贜oBorder策略中,實際分辨率的縱軸達到了1067像素,大于設備分辨率的縱軸的960像素,因此超出去了一部分。同時visibleSize也小于winSize,它等于960除以大的ratio,等于1080。雖然我們不好觀測winSize以及visibleSize,但是很明確地知道它們實實在在存在著,實際分辨率就是winSize的縮影。
至此,才大略整理了引擎的屏幕適配基礎。但設備屏幕許許多多,適配方法肯定是很多的。如今實踐不足,只能留待日后總結了!
最后再記錄一條在安卓開發環境中修改橫豎屏的方法:
在AndroidManifest.xml文件中,找到android:screenOrientation,"landscape"表示橫屏顯示,"portrait"表示豎屏顯示。
總結
以上是生活随笔為你收集整理的cocos2d 屏幕適配_cocos2d-x 2.x屏幕适配基础的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ios 持续获取定位 高德地图_概述-i
- 下一篇: idea怎么将本地文件和远程git对比_