如何將SDL2.0遊戲引擎顯示到Win32窗口中?

SDL遊戲引擎是著名的跨平臺遊戲引擎,廣泛用於遊戲開發,模擬器開發,視頻播放器開發等。最新的SDL 2.0加入了對Android系統的支持,配合其他開發包,如SDL_Image,SDL_TTF,SDL_Net等庫,可實現真正的跨平臺開發,有數以萬計的桌面遊戲通過它開發,當然也有無數的開源代碼可以借鑑和學習,但實際某些應用要配合多窗口或菜單來實現,僅靠引擎本身無法實現所需功能,有時要將引擎界面融合到windows窗口或子窗口中,本文目的即在於此。

工具/原料

SDL 2.0.3遊戲開發包

VC編譯器(示例使用VC2010)

方法/步驟

官方下載SDL2.0開發包

如何將SDL2.0遊戲引擎顯示到Win32窗口中

使用VC嚮導工具,新建 Window 32工程,在此工程示例名為SDLWin32

如何將SDL2.0遊戲引擎顯示到Win32窗口中

如何將SDL2.0遊戲引擎顯示到Win32窗口中

設置工程屬性,添加對應頭文件和庫文件

如何將SDL2.0遊戲引擎顯示到Win32窗口中

如何將SDL2.0遊戲引擎顯示到Win32窗口中

如何將SDL2.0遊戲引擎顯示到Win32窗口中

在工程源文件SDLWin32.cpp中添加SDL 頭文件和庫文件

#include

#pragma comment (lib,"SDL2.lib")

添加變量:

SDL_Window *window;

SDL_Renderer *renderer;

SDL_Texture *sprite;

int window_w, window_h;

int sprite_w, sprite_h;

SDL_Event event;

添加函數LoadSprite,目的用來加載紋理圖片。

SDL_Texture * LoadSprite(SDL_Renderer *renderer, char *file)

{

SDL_Surface *temp;

SDL_Texture *sprite;

/* Load the sprite image */

temp = SDL_LoadBMP(file);

/* Set transparent pixel as the pixel at (0,0) */

if (temp->format->palette) {

SDL_SetColorKey(temp, 1, *(Uint8 *) temp->pixels);

}

/* Create textures from the image */

sprite = SDL_CreateTextureFromSurface(renderer, temp);

if (!sprite) {

SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create texture: %s\n", SDL_GetError());

SDL_FreeSurface(temp);

return 0;

}

SDL_FreeSurface(temp);

/* We're ready to roll. :) */

return sprite;

}

添加繪圖函數 Draw,該函數目的用來將加載的圖片紋理顯示,背景為純黑色。

void Draw(SDL_Renderer * renderer, SDL_Texture * sprite)

{

SDL_SetRenderDrawColor(renderer, 0x0, 0x0, 0x0, 0xFF);

SDL_RenderClear(renderer);

SDL_RenderCopy(renderer, sprite, NULL, NULL);

SDL_RenderPresent(renderer);

}

在WinMain函數首行加入SDL庫初始化函數。

SDL_VideoInit(NULL);

並替換消息循環函數為:

int done = 0;

while (!done) {

/* Check for events */

while (SDL_PollEvent(&event)) {

switch (event.type) {

case SDL_WINDOWEVENT:

switch (event.window.event) {

case SDL_WINDOWEVENT_EXPOSED:

SDL_SetRenderDrawColor(renderer, 0x0, 0x0, 0x0, 0xFF);

SDL_RenderClear(renderer);

break;

}

break;

case SDL_QUIT:

done = 1;

break;

default:

break;

}

}

Draw(renderer, sprite);

}

在WndProc函數中添加WM_CREATE消息,並添加以下代碼,目的是將當前窗口設置為引擎渲染窗口,並設置標題,加載圖片紋理。

case WM_CREATE:

window=SDL_CreateWindowFrom(hWnd);

SDL_SetWindowTitle(window, "SDL Native Window Test");

renderer = SDL_CreateRenderer(window, -1, 0);

SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF);

SDL_RenderClear(renderer);

sprite = LoadSprite(renderer, "flower.bmp");

break;

同時修改WM_DESTROY消息,釋放資源,否則會出現內存洩露。

case WM_DESTROY:

SDL_VideoQuit();

PostQuitMessage(0);

exit(0);

break;

按F7編譯程序,在生成目錄加入SDL2.dll文件,並將實現準備好的flower.bmp文件放到程序所在文件夾下,雙擊exe程序,即可查看運行結果。

如何將SDL2.0遊戲引擎顯示到Win32窗口中

相關問題答案