SDL的幾個寬高概念講解(文中有福利)

2021-08-10 16:07:38 字數 1915 閱讀 8997

sdl系列講解(一)  簡介

sdl系列講解(二) 環境搭建

sdl系列講解(三) 工具安裝

sdl是什麼,能幹什麼,為什麼我們要學習它?

sdl系列講解(四) demo講解

sdl系列講解(五) 除錯c**

sdl系列講解(六) sdl_activity流程

sdl系列講解(七) sdl_image教程

sdl系列講解(八) sdl_ttf教程

sdl系列講解(九) 異常退出分析

sdl系列講解(十) 按鍵處理流程

sdl系列講解(十一) sdl_quit流程

sdl系列講解(十二)建立視窗流程

sdl裡面有幾個比較關鍵的尺寸,我們這節來聊聊這個。了解了這些之後,你就知道如何開發遊戲,如何放置乙個的準確位置。

我們乙個個來看下:

sdlsu***ceview

android上層布局使用的view,和textview

,button

一致,都屬於view級別,這個view的大小,就是我們實際螢幕看到的大小,寬高,就是按照畫素計算出來的。getwidth()

and getheight()

去獲取,如果在oncreate

裡面獲取,基本獲取的是錯誤的值,因為view還沒有被測量,這時我們可以使用post

來處理,或者監聽viewtreeobserver

也可以做到。

window

sdl建立出來的視窗(sdl_createwindow

),這個視窗的大小是固定的,和sdlsu***ceview

大小一致,不能調整。因此對應的設定視窗的大小方法,在android上面不起作用,這個需要注意啦。也就是sdl_setwindowsize

方法是不能用的。

render

,渲染器大小(sdl_createrenderer

),size預設是和window大小一樣,是全屏的,但是我們可以主動修改這個大小,然後配合我們的設計尺寸。比如我們設計的遊戲是480×800的尺寸下,那麼我們遊戲裡面的角色,位置等資訊,都可以使用這個480×800尺寸下進行計算,比如乙個按鈕,在100,100這個位置,指的就是在480×800這個尺寸下的位置,如果我們的window大小是720×1080,那麼我們這裡的100,100的位置,就會經過投影,從480×800->720×1080,這裡就是100/480×720,100/800×1080, 得到在7201080螢幕的顯示位置。如此設定之後,我們的開發就只需要圍繞480×800去展開,不需關注具體螢幕的大小,render會正確的縮放到實際尺寸,具體我們要做的是:如果我們要在480×800的尺寸下開發遊戲,我們這樣子操作

sdl_getrendereroutputsize(renderer,&w,&h);

sdl_rendersetscale(w/480,h/800);

這個有可能會不按比例縮放,如果需要按比例,需要使用sdl_rendersetlogicalsize(480,800); 這個方法會將大小不拉伸的情況下,進行等比縮放。剩餘部分不填充。

textrue

, 紋理的大小,可以通過copy su***ce的大小,這裡比如一張圖大小200×400,那麼建立乙個su***ce,從這個圖,那su***ce的大小就是200×400,然後紋理從su***ce複製過來,也就是也是200×400,如果這時textrue在貼到render上面的時候,沒有指定區域,那麼就是將整個的texture投影到render的整個區域,這裡就是將200×400縮放到400*800上面去。然後再投影到window上面,完成整個的顯示。

css已知寬高和未知寬高的居中定位

1 已知寬高 上圖中我們想要對已知寬度的 服務範圍 進行左右居中定位,我們可以先選擇left或者right樣式,這裡我們選擇的是left,這裡的50 指的是這個盒子的最左側位於水平的百分之五十的地方,也就是中間位置,因為我們知道整體的寬度,所以我們可以直接採用在向左移動寬度的一半,也就是margin...

四 View 的測量寬高和最終寬高的區別

這個問題可以具體為getmeasuredheight 和getheight 有什麼區別。view public final intgetheight 再看看 mbottom mtop 是怎麼來的 view protected boolean setframe int left,int top,int...

獲取控制項的寬高

很多時候,在oncreate方法裡面我們需要獲取控制項的寬高,但是常用的方法只能在onresume方法之後才能呼叫 在此,有三種方法可以在oncreate方法裡面獲取到空間的寬高 方法一 int w view.measurespec.makemeasurespec 0 view.measurespe...