從零開始-邊學邊做-塔防遊戲-七彩三國(六)--SDL--全紅屏幕

第六章:全紅屏幕


前面我們已經熟悉了,如果將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



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