libgdx API之viewport:再也不用擔心畫面適配

一般來說世界尺寸是唯一的,用來確定遊戲元素的大小和相對位置,由遊戲開發確定。但實際運行的設備屏幕尺寸不一。一套又好又簡單的適配方案從libgdx1.0版本開始com.badlogic.gdx.utils.Viewport

目前有5種適配方式供選擇,你也可以擴展Viewport實現自己的方式。

    • FitViewport:按比例縮放世界直到有一個方向(上下或左右)達到屏幕尺寸,世界居中,會留黑框。
  • FillViewport:按比例縮放直到不留黑框,所以會有部分世界超出屏幕。
    • StretchViewport:將世界尺寸拉伸到屏幕尺寸,所以不會按比例,不會有黑框,不會超出。
    • ExtendViewport:先採取Fit形式,再向右或向上擴展世界尺寸充滿屏幕尺寸。這個有點特別,可能會難理解,這種形式的世界尺寸是不唯一的,有一個最小的世界範圍限制,最初的Fit根據這個尺寸進行,然後再增大世界尺寸直至充滿屏幕。這種形式下能呈現所有畫面內容,不會像Fill那樣有超出的部分,也不會像Fit那樣留有黑框因爲擴展的世界尺寸代替了黑框,。
  • ScreenViewport:沒有確定的世界尺寸,世界尺寸也是由屏幕尺寸確定,默認屏幕上一個像素對應一個世界尺寸單位,這個比例可以修改。這種形式下不會縮放,各個遊戲元素按其尺寸(size)繪畫,不會有黑框,屏幕尺寸越大,暴露的視野範圍越大。

注:
這裏的世界尺寸也稱虛擬屏幕尺寸,和某些文章的世界尺寸(如整個遊戲世界地圖大小,虛擬屏幕尺寸是這裏的世界尺寸的一個顯示範圍)不同,這裏的尺寸是指遊戲中呈現到屏幕上的大小。
可以這樣理解,在遊戲開發中確定在某一臺設備中調試,遊戲人物,地圖等相對位置,大小以這個設備上呈現的爲準,之後無論採用哪種適配方案在任意設備上運行都不會改變這種設置。將這個設備的屏幕尺寸當做虛擬屏幕尺寸。
或者說你正在開發一個slg,邏輯中整個大陸地圖尺寸是1000*1000平方米,而你想每次呈現出的尺寸是10*5平方米,這裏的呈現尺寸就是上文的世界尺寸或虛擬屏幕尺寸爲10*5,在這種尺寸的設計上,樹木,士兵,戰船等大小和位置的確定是你在開發中進行的,完全不用理會屏幕尺寸或適配方案。最後選擇使用適配方式,不同方式在不同屏幕上纔有圖片縮放或視野範圍的區別。

嚴格來說遊戲元素的尺寸size並不決定其畫面的縮放(scale決定),size更是一種邏輯上的尺寸,有假想上的單位(米,釐米等),允許是小數。由viewport根據世界尺寸設置相機的投影規模,最後纔有縮放的視覺效果。


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