版本cocos2dx3.3
1.設計分辨率
你配資源使用的分辨率大小,一般是960*640。
2.屏幕分辨率
實際上用戶屏幕的分辨率大小。
想要了解更多建議閱讀
http://www.tairan.com/archives/6508/
的文章
你需要了解的有:
ResolutionPolicy::SHOW_ALL
屏幕寬、高分別和設計分辨率寬、高計算縮放因子,取較(小)者作為寬、高的縮放因子。保證了設計區域全部顯示到屏幕上,但可能會有黑邊。
ResolutionPolicy::EXACT_FIT
屏幕寬 與 設計寬比 作為X方向的縮放因子,屏幕高 與 設計高比 作為Y方向的縮放因子。保證了設計區域完全鋪滿屏幕,但是可能會出現圖像拉伸。
ResolutionPolicy::NO_BORDER
屏幕寬、高分別和設計分辨率寬、高計算縮放因子,取較(大)者作為寬、高的縮放因子。保證了設計區域總能一個方向上鋪滿屏幕,而另一個方向一般會超出屏幕區域。
ResolutionPolicy::FIXED_HEIGHT
保持傳入的設計分辨率高度不變,根據屏幕分辨率修正設計分辨率的寬度。
ResolutionPolicy::FIXED_WIDTH
如果是橫屏游戲使用FIXED_HEIGH。橫屏使用FIXED_WIDTH。保持傳入的設計分辨率寬度不變,根據屏幕分辨率修正設計分辨率的高度。
在載入游戲資源時我寫了三個函數
1.setNodeScaleMin()
設置節點以屏幕寬高比設計分辨率寬高的較小者縮放(適用於控件)
2.setNodeScaleMan()
設置節點以屏幕寬高比設計分辨率寬高的較大者縮放(適用於背景)
3.setFixNodePosition()
修復資源因為FIXED_HEIGH設置后屏幕出現的平移
在場景節點或者UI節點動態加入時設置一下縮放和平移即可。
這種解決方法對於ipad不是很友好。這取決與你的設計分辨率。如果你是16*9比例的設計分辨率不管怎么做適配,在ipad上都是會有些奇怪的。
這里是實現代碼,對於場景節點使用fixScene修正,對於UI節點使用fixUI修正
--[[ @brief:功能函數類 @by 李俊 ]] wolf = wolf or {} local FixUIUtils = {} local BUI = bf.UIManager:getInstance() ---自定義Cocos Studio屏幕像素 local designSize = cc.size( 1280, 800) local screenSize = cc.Director:getInstance():getWinSize() local minScale = math. min(screenSize.height/designSize.height,screenSize.width/designSize.width) local maxScale = math. max(screenSize.height/designSize.height,screenSize.width/designSize.width) --屏幕寬、高分別和設計分辨率寬、高計算縮放因子,取較(小)者作為寬、高的縮放因子。 --適用於控件的縮放 function FixUIUtils.setScaleMin(node) local nodeX = node:getScaleX() local nodeY = node:getScaleY() nodeX = nodeX*minScale nodeY = nodeY*minScale node:setScaleX(nodeX) node:setScaleY(nodeY) end --屏幕寬、高分別和設計分辨率寬、高計算縮放因子,取較(大)者作為寬、高的縮放因子。 --適用於背景的縮放 function FixUIUtils.setScaleMax(node) local nodeX = node:getScaleX() local nodeY = node:getScaleY() nodeX = nodeX*maxScale nodeY = nodeY*maxScale node:setScaleX(nodeX) node:setScaleY(nodeY) end function FixUIUtils.setRootNodewithFIXED() local moveX = (designSize.width-screenSize.width)/ 2 local moveY = (designSize.height-screenSize.height)/ 2 BUI:getSceneRoot():setPosition(cc.p(-moveX ,-moveY)) end function FixUIUtils.fixScene() local node = BUI:getSceneRoot() local ChildrenList = node:getChildren() for _,child in pairs(ChildrenList) do local name = child:getName() if(name== "SceneBack") then FixUIUtils.setScaleMax(child) else FixUIUtils.setScaleMin(child) end end FixUIUtils.setRootNodewithFIXED() end function FixUIUtils.fixUI(node) local ChildrenList = node:getChildren() for _,child in pairs(ChildrenList) do local name = child:getName() if(name== "SceneBack") then FixUIUtils.setScaleMax(child) else FixUIUtils.setScaleMin(child) end end end |
這里是大廳場景的適配制作。主要的難點是錨點選對,因為縮放時根據錨點位置不變進行縮放的。還有就是命名為SceneBack節點的背景是(大)放大的。


這個是UI節點的配置。都要保證是中心縮放的。
