日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

cocos2dx基础篇(29)——屏幕适配

發布時間:2024/1/17 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 cocos2dx基础篇(29)——屏幕适配 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【嘮叨】

????手機的屏幕大小千差萬別,如現在流行的安卓手機屏幕大部分長寬比例為16:9。而iPhone 5S的長寬比例為71:40(接近16:9),也有預測說iPhone 6S的長寬比例也將會是主流的16:9。另外還有一些平板電腦為4:3、16:10、5:4等等。當然還有一些其他的牌子可能屏幕比例也不一樣。

????要想讓你的程序在各種手機上都能很好的呈現游戲畫面,就需要進行屏幕適配


【致謝】

????http://gl.paea.cn/contents/10adab2de4f4bf1c.html


【小知識】

????分辨率:是指屏幕圖像的精密度,即顯示器所能顯示的像素有多少。

????????????如:分辨率480×320的意思是水平方向含有像素數為480個,垂直方向像素數320個。

????????????屏幕尺寸一樣的情況下,分辨率越高,顯示效果就越精細和細膩。

????????????同時分辨率也反映了屏幕長寬比例(如15:10)。


【3.x】

????請移步:http://shahdza.blog.51cto.com/2410787/1550089




【屏幕適配】


1、兩個分辨率

? ? 1.1、窗口分辨率

????main.cpp中有個設置窗口分辨率的函數。該函數是設置了我們預想設備的屏幕大小,也就是應用程序窗口的大小。

//eglView->setFrameSize(480,?320); //

? ??

????1.2、設計分辨率(可視區域)

????AppDelegate.cpp中也有個設置設計分辨率的函數。該函數是設置了我們游戲設計時候的分辨率,也就是可視區域的大小,也就是說設計者初衷的游戲可視區域的分辨率屏幕大小。

????但是對于每個用戶來說,他們使用的設備不一定是(480/320)的,比如手機有大有小。

????而后面的kResolutionShowAll,意思是按照原比例(480/320)進行放縮以適配實際屏幕大小。

//CCEGLView::sharedOpenGLView()->setDesignResolutionSize(480,320,kResolutionShowAll); //

? ??

????以下貼了三張對比圖,加深理解。

? ? (1)這是原圖片大小,窗口大小為480 * 320。


????(2)若設置窗口大小為setFrameSize(960, 640),而不設置設計分辨率kResolutionShowAll的情況下,圖片不放縮,原圖還是480 * 320。

????

????(3)設置了kResolutionShowAll之后,圖片放縮到適配整個屏幕960 * 640 了。



2、五種適配模式

????從上面的講解我們可以了解到,setFrameSize()是設置了窗口大小(即屏幕的實際大小),而這個參數只是為了我們開發時作為模擬參照,在實際手機上運行時,手機的屏幕大小是我們無法設置的。

????而屏幕適配的關鍵在于setDesignResolutionSize(),通過它來設置可視區域的分辨率以及屏幕適配模式。該函數的前兩個參數為分辨率(即屏幕長寬比例),而最后一個參數則是適配的模式。


????2.1、適配模式

? ? (1)kResolutionExactFit ? :拉伸變形,使鋪滿屏幕。

????(2)kResolutionNoBorder ? :按比例放縮,全屏展示不留黑邊。

????????????????????????????????????(長寬中小的鋪滿屏幕,大的超出屏幕)

????(3)kResolutionShowAll ? ?:按比例放縮,全部展示不裁剪。

????????????????????????????????????(長寬中大的鋪滿屏幕,小的留有黑邊)

????(4)kResolutionFixedWidth :按比例放縮,寬度鋪滿屏幕。

????(5)kResolutionFixedHeight:按比例放縮,高度鋪滿屏幕。


????2.2、計算方法

? ? 假設:屏幕分辨率(fWidth,fHeight) ; 設計分辨率(dWidth,dHeight)。

? ? ? ? ? 放縮因子:k1 = fWidth/dWidth ; k2 = fHeight/dHeight。

????則適配后的分辨率大小如下:

????(1)kResolutionExactFit ??:( dWidth * k1 ? ? ? ? , dHeight * k2 ? ? ? ? )

????(2)kResolutionNoBorder ??:( dWidth * max(k1,k2) , dHeight * max(k1,k2) )

????(3)kResolutionShowAll ? ?:( dWidth * min(k1,k2) , dHeight * min(k1,k2) )

????(4)kResolutionFixedWidth?:( dWidth * k1 ? ? ? ? , dHeight * k1 ? ? ? ? )

????(5)kResolutionFixedHeight:( dWidth * k2 ? ? ? ? , dHeight * k2 ? ? ? ? )


????2.3、有圖有真相

????????屏幕大小:400 X 400 。

????????可視區域大小:480 X 320

????????根據上面的計算方法,自己慢慢琢磨吧。

????????


????????


????????


3、橫豎換屏

? ? cocos2dx開發的游戲,在手機上運行的時候,默認是橫屏的。


?? ?3.1、Android

????AndroidManifest.xml文件中

????(1)android:screenOrientation = "landscape" ??//橫屏顯示(默認)

????(2)android:screenOrientation = "portrait" ? ?//豎屏顯示


????3.2、IOS

//-?(NSUInteger)?supportedInterfaceOrientations{//橫屏顯示//return?UIInterfaceOrientationMaskLandscape;//豎屏顯示return?UIInterfaceOrientationMaskPortrait;} //


4、屏幕大小及坐標

????(1)WinSize ? ? ? ?屏幕大小

????(2)VisibleSize ? ?:可視區域大小

????(3)VisibleOrigin ?:可視區域的左下角坐標

//CCDirector::sharedDirector()->getWinSize()CCDirector::sharedDirector()->getVisibleSize();CCDirector::sharedDirector()->getVisibleOrigin(); //


????圖解:



轉載于:https://blog.51cto.com/shahdza/1548460

總結

以上是生活随笔為你收集整理的cocos2dx基础篇(29)——屏幕适配的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。