當前位置:編程學習大全網 - 源碼下載 - ui分辨率

ui分辨率

壹、Cocos編輯器

自動布局系統主要涉及固定與拉伸屬性:

如圖,總***可以修改控件的上下左右四個圖釘和中間的兩個拉伸條六個屬性。

效果

1.當打開其中的任意壹個圖釘時,當前節點與父節點的對應邊的距離即被固定。當父節點的大小修改時,當前節點與父節點對應邊的距離總是不變。

2.當打開其中的任意兩個相對的圖釘時,當前節點與父節點對應的兩邊的距離成固定比例。即當修改父節點的大小時,當前節點到父節點對應兩條邊的距離之比總是不變的。

3.當開啟中間任意壹條拉伸條,如橫向拉伸條,節點的寬度與父節點的寬度之比固定不變。

其他

1. 不開啟上述任意屬性時,對象默認相對左下角位置不變。

2. 當前僅控件對象(文本、FNT字體也沒有)和容器兩種類型有拉伸條屬性。

二、Cocos 2d-x(Cocos Framework)中的相關概念及代碼設置

設計分辨率和屏幕分辨率:

首先我們需要了解兩個概念:在Cocos2d-x中有兩種分辨率:設備分辨率、屏幕分辨率。設備分辨率即當前遊戲所運行平臺的實際分辨率;設計分辨率就是我們設計的遊戲的分辨率。

設計分辨率是可設置的,是我們的遊戲程序能夠“感知到”的分辨率大小,我們的界面超過這個區域的部分都不會顯示。

設計分辨率壹般在啟動時進行設置

AppDelegate::applicationDidFinishLaunching

中進行,代碼如下:

director->getOpenGLView()->setDesignResolutionSize(960,640,ResolutionPolicy::FIXED_HEIGHT);

(這句代碼上邊還有壹句createWithRect這個是在桌面系統上,創建遊戲模擬器用的。可以修改裏邊的Rect的後邊兩個值來修改設備分辨率,但這個值在移動設備上是無效的。)

這句代碼什麽意思呢?

這裏把設計分辨率設置為960,640,並把遊戲界面調整方案設置為固定寬度。但這麽設置之後,我們後邊再獲取設計分辨率時得到的大小卻不壹定是960,640。這又是為什麽呢?

看看源碼:

轉到setDesignResolutionSize的定義看看。裏邊做了壹些判斷和賦值,最終調用了updateDesignResolutionSize,繼續轉到updateDesignResolutionSize裏邊,這個函數的部分代碼如下:

//1.計算遊戲界面在縮放至充滿屏幕的情況下X、Y軸的縮放率:_scaleX= (float)_screenSize.width/ _designResolutionSize.width;

_scaleY= (float)_screenSize.height/ _designResolutionSize.height;//2.根據設配策略,調整縮放率和設計分辨率:if(_resolutionPolicy== ResolutionPolicy::NO_BORDER){//將X、Y軸縮放值設置為其中的最大者

_scaleX = _scaleY = MAX(_scaleX,_scaleY);

}else if(_resolutionPolicy== ResolutionPolicy::SHOW_ALL){//將X、Y軸縮放值設置為其中的最小者

_scaleX = _scaleY = MIN(_scaleX,_scaleY);

}else if( _resolutionPolicy == ResolutionPolicy::FIXED_HEIGHT) {

_scaleX = _scaleY;//將X、Y軸縮放值固定為Y軸縮放值,調整設計分辨率的寬度,使設計分辨率的寬度在縮放後依然能夠充滿屏幕。

_designResolutionSize.width= ceilf(_screenSize.width/_scaleX);

}else if( _resolutionPolicy == ResolutionPolicy::FIXED_WIDTH) {

_scaleY= _scaleX;//將X、Y軸縮放值固定為X軸縮放值,調整設計分辨率的高度,使設計分辨率的高度在縮放後依然能夠充滿屏幕。

_designResolutionSize.height= ceilf(_screenSize.height/_scaleY);

}//其他縮放策略:EXACT_FIT不作調整

這段代碼主要做了兩件事:

1.根據設備分辨率和設計分辨率計算遊戲界面的縮放率;

2.調整設計分辨率。

根據以上源碼我們應該很容易就能夠理解幾種縮放策略的意義:

·NO_BORDER就是在保持設計分辨率大小不變的情況下,將遊戲界面按比例縮放至充滿屏幕。遊戲的上下或者左右兩邊可能會被裁剪。

·SHOW_ALL(Cocos 2d-x默認方案)就是在保持設計分辨率大小不變的情況下,將遊戲界面按比例縮放至設計分辨率的其中壹邊頂住屏幕。遊戲上下或者左右兩邊可能會有黑邊。

·FIXED_HEIGHT就是固定設計分辨率的高度,調整設計分辨率的寬度,使設計分辨率的長寬比與設備分辨率的長寬比相同,然後縮放遊戲界面至充滿屏幕。

·FIXED_WIDTH同上,不同的是保持寬度不變。

·EXACT_FIT是最粗暴的方式,直接將遊戲界面縮放到充滿整個屏幕,X軸Y軸縮放比率不壹定壹致。

那麽,我們應該選擇哪個方案呢?必然的我們應該選擇FIXED_HEIGHT或者FIXED_WIDTH。因為只有這兩個方案下,界面是會自動根據設備分辨率調整設計分辨率的大小並且充滿屏幕。

接下來加載界面。

加載界面在HelloWorld::init中進行:

auto rootNode= CSLoader::createNode("MainScene.csb");

auto size= Director::getInstance()->getVisibleSize();

rootNode->setContentSize(size);

ui::Helper::doLayout(rootNode);

addChild(rootNode);

這裏除了用createNode把界面加載出來,並添加到HelloWorld之外,還做了兩件事情:

設置加載出來的界面的ContentSize,調用對rootNode調用了ui::Helper::doLayout對加載出來的界面進行處理。

為什麽要這麽設計呢,做成自動的多好啊?

第壹個理由:跟編輯器不壹致;第二個理由是:自動調整界面被設計為是被動的,如果是主動進行的話,可能會造成大量的性能損失——如果每次設置大小都要重新遍歷計算所有的子節點的位置,那得浪費多少CPU時間啊。

效果:

設備分辨率X/Y相對設計分辨率X/Y較大,設配策略為固定高度

請點擊輸入圖片描述

設備分辨率X/Y相對設計分辨率X/Y較大,設配策略為固定寬度

請點擊輸入圖片描述

設備分辨率X/Y相對設計分辨率X/Y較小,設配策略為固定高度

請點擊輸入圖片描述

設備分辨率X/Y相對設計分辨率X/Y較小,設配策略為固定高度

請點擊輸入圖片描述

PS:枚舉類型ResolutionPolicy是框架提供給我們的方便的默認方案。其實我們在設置設計分辨率之前可以獲取設備分辨率,然後自己根據設備分辨率調整設計分辨率。

  • 上一篇:tensorflow 怎麽升級gcc
  • 下一篇:黑貓投訴有用嗎數據會告訴妳實話
  • copyright 2024編程學習大全網