SDL 第二課 優化表面的載入和Blit

2021-06-22 02:20:30 字數 1914 閱讀 4528

sdl中文教程:

第二課:

這課的主要內容是改用更高效的方法載入表面和blit。

blit的含義是記憶體中影象的位塊傳輸,指的是將某一表面的全部或部分影象複製到另一表面上。

**首先用sdl_loadbmp(filename.c_str())載入了影象,但是這個影象不能立即使用,因為這個點陣圖是24位色的,而視窗是32位色的, 將乙個表面blit到另乙個不同格式的表面上不是乙個好主意,因為這樣sdl會在每次blit時做一次臨時性的格式轉換,這會導致程式的執行效率降低。

因而這是就需要用到sdl_displayformat()函式,之所以這麼做,是因為當你嘗試將乙個表面貼上到另乙個不同格式的表面時,sdl會自動轉換它的格式,使它們具有相同的格式。

而在每次blit時都建立乙個轉換後的表面會浪費機器的處理能力並降低程式執行速度。由於我們在載入表面時就已經將其格式轉換好了,所以當你要將此表面應用到視窗上時,它已經與視窗具有相同格式,那麼sdl就不必進行臨時的格式轉換了。

注意:舊的載入得到的表面和新的優化處理後的表面都存在,注意事後要及時釋放它們。

接著就是一些顯示的座標問題,留意是左上角為原點就行了

補充:std::string是c++的string,如果您不了解c++,也可以使用c的string,即char*char陣列。下面**中用到的filename.c_str()是c++ string的取指標操作,返回型別為char*,指向字串首字元位址,即可理解為c++ string轉c string,所以這裡用哪種string都沒問題。

筆記:下面這些函式都是第一課見過的,就再簡單說說當做複習吧

sdl_loadbmp():載入bmp

sdl_freesu***ce():釋放掉所佔的空間

sdl_init():初始化sdl的子系統

sdl_setvideomode():設定視窗的引數

sdl_delay():設定幾秒後關閉

sdl_quit():退出sdl系統

下面的就是這課的新東西

sdl_rect:sdl的座標類

sdl_wm_setcaption("hello world",null):設定視窗標題,如果顯示視窗時出現了問題,screen會被設為null。

sdl_displayformat():建立乙個優化了格式的影象

sdl_blitsu***ce(source,null,destination,&offset):第四個引數是設定把圖放到的座標位置

//標頭檔案

#include"sdl.h"

#include//視窗屬性

const int screen_width=640;

const int screen_height=480;

const int screen_bpp=32;

//將要使用的表面

sdl_su***ce *message=null; //一張寫著字樣的

sdl_su***ce *background=null; //背景

sdl_su***ce *screen=null; //程式視窗

sdl_su***ce *load_image( std::string filename)

//返回優化後的表面

return optimizedimage;

}int main(int arge, char *args)

第二課 型別和值

lua是一種動態型別語言。沒有型別定義的語法。每個值都攜帶了它自身的型別資訊。8種基礎型別 nil 空 boolean 布林 number 數字 string 字串 userdata 自定義型別 function 函式 thread 執行緒 table 表 函式type可 根據乙個值返回其型別名稱。...

PS第二課 向量工具和小黑小白

一.向量工具 快捷鍵u,切換工具shift u 1.形狀模型 繪製時自動新建圖層,預設填充背景色。2.顏色填充 純色填充 漸變填充 圖案填充 3.圖形描邊 描邊大小 描邊填充 純色填充 漸變填充 圖案填充 4.圖形大小 屬性欄精確調節 ctrl t進行大小縮放 5.影象繪製 按住shift鍵可以繪製...

第二課 工廠模式和原型模式

一 製作乙個抽象產品 螺絲 製作2個具體產品 8mm螺絲 和 6mm螺絲 使用簡單工廠來實現這個場景,並且讓客戶端通過簡單工廠來獲取具體產品。然後擴充套件乙個7mm螺絲,你會發現這要修改簡單工廠的 進而違反了開閉原則。所以在使用工廠方法來重構一遍 保證7mm螺絲可以被順利地擴充套件進來 簡單工廠 a...