cocos2dx3.0五种屏幕适配模式,及FIXED_WIDTH、FIXED_HEIGHT使用
2019獨角獸企業重金招聘Python工程師標準>>>
適配模式
(1)EXACT_FIT ??:拉伸變形,使鋪滿屏幕。會出現圖像拉伸
屏幕寬 與 設計寬比 作為X方向的縮放因子,屏幕高 與 設計高比 作為Y方向的縮放因子。
保證了設計區域完全鋪滿屏幕,但是可能會出現圖像拉伸。
(2)NO_BORDER ??:按比例放縮,全屏展示不留黑邊。會有超出屏幕區域
屏幕寬、高分別和設計分辨率寬、高計算縮放因子,取較(大)者作為寬、高的縮放因子。
保證了設計區域總能一個方向上鋪滿屏幕,而另一個方向一般會超出屏幕區域。
ResolutionPolicy::NO_BORDER情況下,設計分辨率并不是可見區域(VisibleSize),我們布局精靈需要根據VisibleOrigin和VisibleSize來做判斷處理。
(3)SHOW_ALL ? ?:按比例放縮,全部展示不裁剪。可能會有黑邊。
屏幕寬、高分別和設計分辨率寬、高計算縮放因子,
取較(小)者作為寬、高的縮放因子。保證了設計區域全部顯示到屏幕上,但可能會有黑邊。
(4)FIXED_WIDTH ?:按比例放縮,寬度鋪滿屏幕。
保持傳入的設計分辨率高度不變,根據屏幕分辨率修正設計分辨率的寬度。
(5)FIXED_HEIGHT?:按比例放縮,高度鋪滿屏幕。
保持傳入的設計分辨率寬度不變,根據屏幕分辨率修正設計分辨率的高度。
使用FIXED_WIDTH和FIXED_HEIGHT ,可能會有一個方向超出屏幕:
bool AppDelegate::applicationDidFinishLaunching() {
? ? // initialize director
? ? auto director = Director::getInstance();
? ? auto glview = director->getOpenGLView();
? ? if(!glview) {
?? ??? ?glview = GLViewImpl::createWithRect("My Game", Rect(0, 0, 960, 500), 0.7f);
? ? ? ? director->setOpenGLView(glview);
? ? }
?? ?auto winSize = Size(480, 320);//設計分辨率
?? ?auto screenSize = glview->getFrameSize();//屏幕分辨率,
? ? // turn on display FPS
? ? director->setDisplayStats(true);
? ? // set FPS. the default value is 1.0/60 if you don't call this
? ? director->setAnimationInterval(1.0 / 60);
? ? register_all_packages();
?? ?float widthRate = screenSize.width / winSize.width;
?? ?float heightRate = screenSize.height / winSize.height;
?? ?
?? ?if (widthRate < heightRate)
?? ?{
?? ??? ?//說明設計分辨率寬度偏大
?? ??? ?//這時候我們讓高度適配,寬度裁剪掉。也就是圖片寬度會超出屏幕外
?? ??? ?//設置設計分辨率的和適配模式,進去看setDesignResolutionSize和updateDesignResolutionSize這兩個個方法的源碼可以知道:
?? ??? ?//下面這句代碼走完之后,設計分辨率的高度被設置成480,但是寬度并不是800,而是做了縮放,下面注釋詳細介紹
?? ??? ?director->getOpenGLView()->setDesignResolutionSize(winSize.width, winSize.height, ResolutionPolicy::FIXED_HEIGHT);
?? ?}
?? ?else
?? ?{
?? ??? ?//說明設計分辨率高度偏大
?? ??? ?//這時候我們讓寬度適配,高度裁剪掉。也就是圖片高度會超出屏幕外
?? ??? ?director->getOpenGLView()->setDesignResolutionSize(winSize.width, winSize.height, ResolutionPolicy::FIXED_WIDTH);
?? ?}
?? ?/*
?? ?updateDesignResolutionSize函數部分源碼:
?? ?_scaleX = (float)_screenSize.width / _designResolutionSize.width;
?? ?_scaleY = (float)_screenSize.height / _designResolutionSize.height;
?? ?if ( _resolutionPolicy == ResolutionPolicy::FIXED_HEIGHT)
?? ?{
?? ??? ?_scaleX = _scaleY;
?? ??? ?//為了讓_screenSize.width / _designResolutionSize.width = _screenSize.height / _designResolutionSize.height,
?? ??? ?//將_designResolutionSize.width重新賦值
?? ??? ?_designResolutionSize.width = ceilf(_screenSize.width/_scaleY);
?? ?}
?? ?*/
? ? auto scene = HelloWorld::createScene();
? ? director->runWithScene(scene);
? ? return true;
}
?
void GLView::setDesignResolutionSize(float width, float height, ResolutionPolicy resolutionPolicy)
{
? ? CCASSERT(resolutionPolicy != ResolutionPolicy::UNKNOWN, "should set resolutionPolicy");
? ??
? ? if (width == 0.0f || height == 0.0f)
? ? {
? ? ? ? return;
? ? }
? ? _designResolutionSize.setSize(width, height);
? ? _resolutionPolicy = resolutionPolicy;
? ??
? ? updateDesignResolutionSize();
?}
轉載于:https://my.oschina.net/andyzzh1314/blog/1808678
總結
以上是生活随笔為你收集整理的cocos2dx3.0五种屏幕适配模式,及FIXED_WIDTH、FIXED_HEIGHT使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SOFA 源码分析 — 连接管理器
- 下一篇: amazeui学习笔记--css(布局相