Ch01: Hello,SDL

我認爲使用SDL的優點在於:

  • 鼻祖級的跨平臺開源框架
  • 始終如一的代碼,API幾乎不多變更
  • sf/Git-hub數以萬計的開源project,其中不乏商業案例能夠借籤學習
  • SDL 2.x版本加入了對Android的支持,使用NDK便可編譯
  • 一樣有其餘語言的binding,如Pascal, Objective-C, Python, Ruby,and Java ...
  • Game,模擬器,播放器,圖形庫等領域都能看到它的身影

**廢話不說了,let's go ** 示例代碼建立一個最基本的SDL窗體。ios

輸入圖片說明

#include <SDL.h>
#include <iostream>
using namespace std;

int main(int argc, char** argv)
{
	SDL_Window* pWindow = 0;
	SDL_Renderer *pRenderer = 0;
	bool bRunning = true;
	if (SDL_Init(SDL_INIT_EVERYTHING) < 0)
	{
		cerr << "SDL_Init fail" << endl;
		return EXIT_FAILURE;
	}
	pWindow = SDL_CreateWindow("Hello,SDL",
		SDL_WINDOWPOS_CENTERED,
		SDL_WINDOWPOS_CENTERED,
		640, 480, SDL_WINDOW_SHOWN);
	if (pWindow != nullptr)
	{
		pRenderer = SDL_CreateRenderer(pWindow,
			-1, 0);
	}
	else
		return EXIT_FAILURE;
	SDL_SetRenderDrawColor(pRenderer, 0, 0, 0, 255);
	SDL_Event event;
	while (bRunning)
	{
		if (SDL_PollEvent(&event))
		{
			switch (event.type)
			{
			case SDL_QUIT:
				bRunning = false;
				break;
			default:
				break;
			}
		}
		SDL_RenderClear(pRenderer);
		SDL_RenderPresent(pRenderer);
	}
	SDL_DestroyWindow(pWindow);
	SDL_DestroyRenderer(pRenderer);
	SDL_Quit();

	return 0;
}

SDL_Init

int SDL_Init(Uint32 flags)
  • SDL_Init 實際上是調用SDL_InitSubSystem() 初始化子系統,包含如下flags,
  • SDL_INIT_TIMER
  • SDL_INIT_AUDIO
  • SDL_INIT_VIDEO
  • SDL_INIT_JOYSTICK
  • SDL_INIT_HAPTIC
  • SDL_INIT_GAMECONTROLLER
  • SDL_INIT_EVENTS
  • SDL_INIT_EVERYTHING
  • SDL_INIT_NOPARACHUTE 能夠使用或運算符| 同時初始化若干子系統,如
SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO);

另外也能夠使用SDL_WasInit 來檢查子系統是否初始化成功。框架

SDL_Renderer* SDL_CreateRenderer(SDL_Window* window,
                                 int         index,
                                 Uint32      flags)

index 能夠理解爲當前的支援渲染的顯卡索引, 賦值爲-1 使用第一個顯卡函數

flags 有如下3個可供選擇學習

  • SDL_RENDERER_SOFTWAREui

  • SDL_RENDERER_ACCELERATEDspa

  • SDL_RENDERER_PRESENTVSYNCcode

  • SDL_RENDERER_TARGETTEXTURE索引

  • SDL_Window ,SDL_Renderer 能夠使用SDL_DestroyWindow(),SDL_DestroyRenderer()銷燬圖片

  • SDL_Event 循環it

  • 渲染和繪製操做一般獨立到單獨的函數中,如

void draw (SDL_Renderder*)
{
    //draw something...
}
void render( )
{
     SDL_RenderClear(pRenderer);
     draw(pRenderer);
     SDL_RenderPresent(pRenderer);
}

本文參考Shaun Mitchell 《SDL Game Development》

相關文章
相關標籤/搜索