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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

cocos2d 屏幕適配_cocos2d-x 2.x屏幕适配基础

發布時間:2024/9/19 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 cocos2d 屏幕適配_cocos2d-x 2.x屏幕适配基础 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一開始我就忽略了屏幕適配的問題,現在才發現它是多么的重要。通過實踐才領悟了其基礎概念,而屏幕適配的策略是建立在其上的,有很多,但我還沒有認真研究。這里僅把自己對屏幕適配基礎知識進行一個梳理。

關于屏幕適配,有一個基礎單位:像素。像素構成了分辨率,不應該把分辨率理解為大小。因此這里不說大小,只說分辨率;不說長寬,只說橫縱。

1.FrameSize

這個最好理解,就是設備的分辨率,不同的手機有不同的分辨率。事實上,在PC上面開發也有一個設備分辨率,那就是在main.cpp里面設置的窗口分辨率,這個窗口應該理解為設備。因此不必在手機上模擬屏幕適配策略,在PC模擬上就足夠了。通過:

CCEGLView::sharedOpenGLView()->getFrameSize();

就可以得到設備的分辨率,它是屏幕適配的基礎。注意,設備分辨率一定是動態變換的,根據不同設備能獲得不同的值。

2.winSize

很多教程中把它說成是設計分辨率,也許很恰當,但是我感覺不太好理解。我把它叫做游戲分辨率。它就像是一個畫布,必須附著在畫板上面,這個畫板就是設備屏幕。如果不手動設置的話,其默認值就和程序入口時設置的設備分辨率一樣。所以,在PC上開發,默認情況下游戲的分辨率和窗口分辨率是一定保持一致的,但由于不同平臺程序入口不一致(不是引擎入口),放到手機上就會出現不適配的情況了。游戲分辨率和設備分辨率是不同的概念,是兩碼事。

我們需要手動設置winSize,手動設置winSize,就是所謂的屏幕適配。在后文詳述。

3.visibleSize

我還是覺得其它教程對它的描述模糊不清。我把它叫做可見游戲分辨率。什么叫可見游戲分辨率?就像一張大畫布,大過了所依附的畫板,會多出去一些布料,無論如何,這張畫布都是游戲分辨率。但是只有處在畫板內部的那部分畫布,才能算作可見游戲分辨率(只是個比方,其實出現這種情況,visibleSize還是要大于frameSize的)。visibleSize就是顯示于FrameSize里面的winSize。關于這個概念點,我的描述還是不很精當。不過只要理解了winSize就行,visibleSize就是winSize的子集。

接下來就可以來分析引擎提供的屏幕適配方案了。

有意思的是,引擎把設置游戲分辨率(winSize)和適配參數放在了一個接口里面:pEGLView->setDesignResolutionSize(float width, float height, ResolutionPolicy resolutionPolicy)

適配參數有5個可用值,ShowAll, NoBorder, ExactFit并沒有改變游戲分辨率,只是通過一個比例獲得了一個新的分辨率,我把它叫做實際游戲分辨率,這才是呈現給玩家的真實游戲分辨率。雖然它原則上必須跟設備分辨率一致,但還是兩碼事。剩下的兩個參數是FixedHeight和FixedWidth,它們用來修改游戲分辨率,也就是改動了winSize,保證了winSize的橫縱比例與FrameSize的橫縱比例一致。我做了張圖表,表示其效果。

橫(像素)

縱(像素)

效果

設備分辨率(frameSize)

640

960

游戲分辨率(winSize)

720

1200

ratio(設備/游戲)

0.888888889

0.8

實際分辨率(winSize)

ShowAll

576

960

根據小ratio計算實際分辨率,左右出現黑邊(圖1)

NoBorder

640

1067

根據大ratio計算實際分辨率,上下超出屏幕(圖2)

ExactFit

640

960

出現拉伸

FixedHeight

640

960

根據frameSize的橫縱比,改變winSize寬為800

FixedWidth

640

960

根據frameSize的橫縱比,改變winSize高為1080

再舉兩個圖例:

ShowAll:

NoBorder:

紅色框框表示的范圍就是實際分辨率,即真實的游戲分辨率。可以看到在NoBorder策略中,實際分辨率的縱軸達到了1067像素,大于設備分辨率的縱軸的960像素,因此超出去了一部分。同時visibleSize也小于winSize,它等于960除以大的ratio,等于1080。雖然我們不好觀測winSize以及visibleSize,但是很明確地知道它們實實在在存在著,實際分辨率就是winSize的縮影。

至此,才大略整理了引擎的屏幕適配基礎。但設備屏幕許許多多,適配方法肯定是很多的。如今實踐不足,只能留待日后總結了!

最后再記錄一條在安卓開發環境中修改橫豎屏的方法:

在AndroidManifest.xml文件中,找到android:screenOrientation,"landscape"表示橫屏顯示,"portrait"表示豎屏顯示。

總結

以上是生活随笔為你收集整理的cocos2d 屏幕適配_cocos2d-x 2.x屏幕适配基础的全部內容,希望文章能夠幫你解決所遇到的問題。

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