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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

cocos2dx3.0五种屏幕适配模式,及FIXED_WIDTH、FIXED_HEIGHT使用

發布時間:2023/12/20 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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使用的全部內容,希望文章能夠幫你解決所遇到的問題。

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