上一課我們講解了關於如何用sdl顯示乙個bmp的,其實就是涉及sdl_window,sdl_su***ce,sdl_renderer,sdl_texture,如果在sdl上面顯示幾個呢,也很簡單,也就是用多個sdl_texture繪製在乙個sdl_renderer上,在指定位置以及大小就可以了,下面看一下**的實現:
講解:
const int screen_width = 640;//window視窗寬度
const int screen_height = 480;//window視窗的高度
//sdl_window視窗的銷毀
void clesson03::cleanup(sdl_window* window)
//銷毀renderer,window,texure,原作者寫的這個函式比這個要好,這裡僅僅是為了實現功能。
void clesson03::cleanup(sdl_texture* background, sdl_texture* image, sdl_renderer* renderer, sdl_window* window)
if(image)
if(renderer)
if(window)
}/*這個就是標準的c++輸出功能,sdl_geterror()獲取錯誤碼
*/void clesson03::logsdlerror(std::ostream &os, const std::string &msg)
/* * load乙個bmp檔案,並且返回乙個sdl_texture
* @param file bmp檔案
* @param ren 需要渲染的renderer
* @return 乙個sdl_texture指標或者null.
*/sdl_texture* clesson03::loadtexture(const std::string &file, sdl_renderer *ren)
} else
return texture;}/*
* 繪製texure在renderer指定的位置。
* the texture's width and height
* @param tex 需要在renderer繪製的texture;
* @param ren texture繪製的renderer
* @param x x位置
* @param y y位置
感覺寫的意思很彆扭,文筆不是很好(只可意會,不可言傳)
*/void clesson03::rendertexture(sdl_texture *tex, sdl_renderer *ren, int x, int y)
int clesson03::run(int argc, char** argv)
//建立sdl_window
sdl_window *window = sdl_createwindow("oad工作室-多個bmp顯示", 100, 100, screen_width, screen_height, sdl_window_shown);
if (window == nullptr)
//建立sdl_renderer
sdl_renderer *renderer = sdl_createrenderer(window, -1, sdl_renderer_accelerated | sdl_renderer_presentvsync);
if (renderer == nullptr)
//建立兩個texture,乙個背景,乙個前景
const std::string respath(argv[1]);
sdl_texture *background = loadtexture(respath + "background.bmp", renderer);
sdl_texture *image = loadtexture(respath + "image.bmp", renderer);
//make sure they both loaded ok
if (background == nullptr || image == nullptr)
//clear sdl_window,準備開始繪製
sdl_renderclear(renderer);
//這個函式就是獲取texture的資訊,如果不能理解(你可以認為是bmp的一些資訊,其實這裡已經沒有sureface什麼事了)
int bw, bh;
sdl_querytexture(background, null, null, &bw, &bh);
//在renderer上繪製4個圖,這個演算法肯定是最笨,就簡單的,知道怎麼回事就可以了,必定就是乙個demo
rendertexture(background, renderer, 0, 0);
rendertexture(background, renderer, bw, 0);
rendertexture(background, renderer, 0, bh);
rendertexture(background, renderer, bw, bh);
//這裡繪製前景在中間顯示,**很簡單。
int iw, ih;
sdl_querytexture(image, null, null, &iw, &ih);
int x = screen_width / 2 - iw / 2;
int y = screen_height / 2 - ih / 2;
rendertexture(image, renderer, x, y);
//更新一下renderer
sdl_renderpresent(renderer);
bool brun = true;//程式是否允許
while (brun) }}
cleanup(background, image, renderer, window);
sdl_quit();
return 0;
}第二課:sdl window的建立與顯示,我們修改的**教程完以後會上傳到csdn上。
鋼琴第四課
因為此前每天都練琴,曲譜也都記住了,所以,週六,臨時被老師喊去時,非常自信。學到了很多知識。1.連貫性方面 連貫性要注意 其實,連貫性在於對曲目的熟練程度,手指的靈活程度,還有不同音之間的連貫跳躍 音要連續 不同音,要連續連線在一起 這個音落下,上個音才起來 2.節奏方面 四分音符要短快,彈到了,立...
Android OpenGL教程 第四課
android opengl 教程 第四課旋 在這一課裡,我將教會你如何旋轉三角形和四邊形。左圖中的三角形沿y軸旋轉,四邊形沿著x軸旋轉。我們增加兩個變數來控制這兩個物件的旋轉。這兩個變數加在程式的開始處其他變數的後面。它們是浮點型別的變數,使得我們能夠非常精確地旋轉物件。浮點數包含小數字置,這意味...
Linux基礎 第四課
nfs伺服器設定 安裝sudo apt get install portma 安裝sudo apt get install nfs kernel server 配置檔案etc exports 增加共享的目錄 ip2位址以及許可權 啟動服務 service portmap start 然後啟動服務 s...