第六章:全紅屏幕
前面我們已經熟悉了,如果將sdl自帶的測試程序編譯出目標測試程序在android手機上運行。本章,我們將創建一個自己的空的工程。並且調用SDL的接口,刷新屏幕爲全紅色。
申明:本文及後續內容,都是本人蔘考別人代碼做的自我理解,如有解釋錯誤,而誤導讀者,請見諒。
一。獲取屏幕
開發windows程序時,SDL有這樣的方式獲取屏幕
SDL_Surface* pSDL_Surface = SDL_SetVideoMode(m_uiWidthPixel, m_uiHeightPixel, 32,SDL_SWSURFACE);
但是在android上沒有使用成功。 也沒再深究。於是採用拿來主義,從之前的那個例子中摳出了,獲取屏幕的方法。
//定義一個全局的 g_state
static SDLTest_CommonState *g_state;
//首先需要下面兩步初始化
int skypark_sdl_init(char **argv) {
g_state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO);
if (!g_state) {
return -1;
}
g_state->window_flags |= SDL_WINDOW_RESIZABLE;
if (!SDLTest_CommonInit(g_state)) {
return -2;
}
return 0;
}
然後在程序主循環中獲取屏幕
SDL_Event event;
while (!done) {
//sleep(60);
//g_SkyparkLog.log("[%s][%d]run...", __FILE__, __LINE__);
while (SDL_PollEvent(&event)) {
SDLTest_CommonEvent(g_state, &event, &done);
}
for (int i = 0; i < g_state->num_windows; ++i) {
if (g_state->windows[i] == NULL)
continue;
//按照我的理解,g_state->renderers[i],就是屏幕了。
ShowScreen(g_state->renderers[i]);
}
}
二。繪製紅色屏幕
void ShowScreen(SDL_Renderer * renderer) {
sleep(1);
static Uint64 i = 0;
i++;
if (i % 10 == 0) {
g_SkyparkLog.log("[%s][%d]run...", __FILE__, __LINE__);
}
//設置顏色
SDL_SetRenderDrawColor(renderer, 0xFF, 0x00, 0x00, 0xFF);
//以上面的顏色擦除
SDL_RenderClear(renderer);
//將緩存刷新到實際屏幕
SDL_RenderPresent(renderer);
}
三。編譯運行:
好了,步驟雖然不多,但是其中遇到不少小問題。相信新手也會遇到各種莫名其妙的問題。所以,我上傳一份打包好的代碼到csdn上。有需要的朋友可以下載:
http://download.csdn.net/detail/ycg01/6784551