cocos2d-x 3.10 安卓 屏幕適配

在cocos3d-x升級到3.10以後,不斷的出現新的問題。

BUG:

在移植到安卓平臺上,會出現屏幕在中央,而不能根據ResolutionPolicy的選項來進行屏幕的適配、縮放和拉伸。

但是,在PC機上面,這個問題是沒有的。

思路:

因爲在PC機上是沒有問題的,懷疑是否是因爲安卓部分出現了BUG,在安卓的代碼中搜尋設置地點,未果。

因爲控制屏幕說到底是GLiew來控制的,所以返回到AppDelegate.cpp中來尋找答案。

BUG原因:

在經過數次嘗試以後,發現由於官方想要更完美的適配機型,設置了多種分辨率,並更具識別到的分辨率來進行內容的縮放。

但是官方也明白:不可能把所有的分辨率都列舉出來,於是,我不知道是那個程序員寫的這段代碼,利用IF語句來進行比較,確定是否縮放以及縮放倍數。

好,現在我們假設

designResolutionSize:450*800

smallResolutionSize:450*800

largeResolutionSize:900*1600

frameSize:540*960

  if (frameSize.height > largeResolutionSize.height)
  {        
     director->setContentScaleFactor(MIN(largeResolutionSize.height/designResolutionSize.height, largeResolutionSize.width/designResolutionSize.width));
  }
  else
  {        
     director->setContentScaleFactor(MIN(smallResolutionSize.height/designResolutionSize.height, smallResolutionSize.width/designResolutionSize.width));
  }


(其中setContentScaleFactor是設置surface的大小

好嗎,經過這麼一縮放辛辛苦苦適配成功的屏幕又變回smallResolutionSize了。

解決辦法:

最簡單的辦法就是把這一段刪掉(這部分所有的if else 以及 ifelse)就可以直接搞定。

額外福利:

glview->setDesignResolutionSize(designResolutionSize.width, designResolutionSize.height, ResolutionPolicy::EXACT_FIT);
這條語句就是用來設置屏幕的適配方案的,第一個參數是設計的寬度,第二個參數是設計的高度,第三個參數是適配的方法。

第三個參數的介紹:

  ResolutionPolicy::EXACT_FIT 拉伸屏幕,是屏幕大小完全與實際屏幕一致,但可能元素會發生變形
  ResolutionPolicy::FIXED_HEIGHT 按高度等比例縮放,但可能寬度或無法顯示或有黑邊
  ResolutionPolicy::FIXED_WIDTH 同理,按寬度等比例縮放,但可能高度或無法顯示或有黑邊
  ResolutionPolicy::NO_BORDER 等比例縮放,直到沒有黑邊,但可能部分內容無法看到
  ResolutionPolicy::SHOW_ALL 等比例縮放,直到高度或寬度剛好適應屏幕,但可能有黑邊

其實,對於我來說,我比較偏愛EXACT_FIT,因爲目前大部分屏幕都是成比例的,所以直接EXACT_FIT,元素變形的可能性也不大。其實,如果成比例的話,上面每一種都不錯,效果都一樣的完美。但是,目前網絡上、書籍上大部分還是推薦SHOW_ALL,我猜想大概是有的手機是虛擬按鍵吧,所以各位因人而異吧!

嗚嗚,終於改好了 吐槽一下 博客的編輯器真不好用!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章