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》

相关文章
相关标签/搜索