cocos2d x螢幕適配原理分析

2022-08-12 19:15:20 字數 1950 閱讀 3094

開發移動應用的螢幕適配和愛情一樣是乙個從洪荒時代就存在的永恆命題,根本目的是實現在不同裝置上使用者體驗的統一。

cocos2d-x在cocos2d-2.0-x-2.0.4版本之前沒有提供解決的方案,開發者只能自己解決,其中一些方法見 

這裡從2.0-x-2.0.4開始,勤勞的cocos2d-x團隊終於著手解決這個問題了~贊! 下面用乙個例項分析一下其實現原理,官方說明文件見 

這裡setposition()的變化

之前版本可能已經習慣了ccnode::setposition(const ccpoint &position);和ccnode::setpositioninpixel(const ccpoint &position);

但在新的版本裡,只有setposition(const ccpoint &position); 

這裡傳入的引數不是畫素,也和傳統的point有不同,它指的是在designresolutionsize參照下的座標。

驗證交給你自己來:比如設計解析度為480x320,設定乙個sprite的位置為240,160,在480x320解析度下會發現它在螢幕正中,

模擬其他解析度,960x640,1024x768,會發現它依然在螢幕中心,這就可了解240,160這個值跟實際螢幕解析度已經無關了,

只和designresolutionsize有關,理解這一點至關重要,是後續開發正確空間感的基礎!

cc_content_scale_factor()的變化

首先enableretinadisplay()在新版本裡取消了,將不會有什麼retina裝置上scalefactor為2的說法了,

因為designresolutionsize已經解決了按不同螢幕縮放的問題,所以cc_content_scale_factor();始終返回1。

所以新版本裡的定義已經過時了,無須理會。

當然,開發者可以通過ccdirector::shareddirector()->setcontentscalefactor()來設定contentscalefactor,這個係數可以理解為

原始尺寸和designresolutionsize的比值,這個比值將用來繪製。

如果只是一套資源按照不同螢幕解析度縮放,可以不用理會。

getwinsize()的變化

ccdirector::shareddirector()->getwinsize();   獲取的是designresolutionsize

ccdirector::shareddirector()->getwinsizeinpixels();  獲取的是getwinsize*contentscalefactor之後的值,和老版本一樣。

如果contentscalefactor為1,則這兩個函式返回的值一樣。 

使用kresolutionnoborder策略時要注意的

ccsize szvisible = ccdirector::shareddirector()->getvisiblesize();

ccpoint posvisible = ccdirector::shareddirector()->getvisibleorigin();

使用該策略時,因為標準背景圖可能會超出螢幕,所以設定位置時需要已乙個可視矩形為基準。

可以這樣理解,szvisible就是你在實際裝置上能看到的有效區域的寬高,posvisible就是這個有效區域的起始座標,和szvisible構成乙個可視矩形,一般來說這個可視矩形是設計解析度下可視矩形的子集。

總結一下,cocos2d-x新的版本(對於從1.0.1-x-0.11.0上來的人)的確新增了不少新的功能,**結構也更加合理,這些都是開發者之福,希望2dxteam繼續加油!

cocos2d x螢幕適配原理

之前,蘋果手機對480 320和960 640的手機適配策略是這樣的,當解析度是480 320時,尋找的是1.png。當解析度是960 640時,尋找的是1 2x.png。這個是1.png的2倍大小,這樣就能保證在不同的解析度手機上都能很好的執行。但是,這給我們的美工增加了不小的工作量,而且安裝包的...

cocos2d x螢幕適配原理分析

開發移動應用的螢幕適配和愛情一樣是乙個從洪荒時代就存在的永恆命題,根本目的是實現在不同裝置上使用者體驗的統一。cocos2d x在cocos2d 2.0 x 2.0.4版本之前沒有提供解決的方案,開發者只能自己解決,其中一些方法見 這裡從2.0 x 2.0.4開始,勤勞的cocos2d x團隊終於著...

Cocos2d x螢幕適配原理分析

setposition 的變化 之前版本可能已經習慣了ccnode setposition const ccpoint position 和ccnode setpositioninpixel const ccpoint position 但在新的版本裡,只有setposition const ccp...