Ch01: Hello,SDL
博客专区 > Mousa 的博客 > 博客详情
Ch01: Hello,SDL
Mousa 发表于1年前
Ch01: Hello,SDL
  • 发表于 1年前
  • 阅读 99
  • 收藏 1
  • 点赞 0
  • 评论 2

【腾讯云】新注册用户域名抢购1元起>>>   

摘要: 前段时间忽发奇想,想把多年累积的C/C++的经验用到Android上面。首先考虑到的是趣味性,首当其冲的就是实现一些小游戏;其次是考虑的跨平台的框架或游戏引擎,刚好手台有本cocos2dx书籍,都是2.x版本的,看起来也不难,再后来又看到Unity3D, 美中不足的是基本舍弃了C++。拿cocos2dx build几个demo,感觉Android也不是很难的事情呀。但是后来的某一天,从应用商店下了一些类似扫雷的小游戏后,我决定舍弃这些游戏引擎,把几年前看过的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窗体。

输入图片说明

#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_SOFTWARE

  • SDL_RENDERER_ACCELERATED

  • SDL_RENDERER_PRESENTVSYNC

  • SDL_RENDERER_TARGETTEXTURE

  • SDL_Window ,SDL_Renderer 可以使用SDL_DestroyWindow(),SDL_DestroyRenderer()销毁

  • SDL_Event 循环

  • 渲染和绘制操作通常独立到单独的函数中,如

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

本文参考Shaun Mitchell 《SDL Game Development》

标签: SDL
  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 17
博文 7
码字总数 8690
评论 (2)
BlitBu
这个是SDL2吗
Mousa
是的
×
Mousa
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: