这就是SDL所做的事情。它将Windows/Linux/Mac/Android/iOS等工具包装起来,让你可以用SDL编写代码,然后编译到它所支持的任何平台。为了使用它,你需要安装它。...SDL需要这种类型的main,所以它能兼容多种平台。 然后我们声明我们的SDL窗口,我们将在稍后创建这个窗口。继而我们有一个屏幕SDL表面。SDL表面只是一个2D图像。...在声明我们的窗口和屏幕表面后,我们初始化SDL。在没有初始化SDL之前,你不能调用任何SDL函数。由于我们关心的只是使用SDL的视频子系统,所以我们只将SDL_INIT_VIDEO标志传递给它。...由于SDL_GetError是唯一的参数,所以它返回的字符串将被加上。SDL_GetError 返回一个 SDL 函数产生的最新错误。 SDL_GetError是一个非常有用的函数。...SDL_GetError 会让你知道任何 SDL 函数内部是否发生了错误。 如果SDL初始化成功,我们要使用SDL_CreateWindow创建一个窗口。
扩展库 SDL_image SDL扩展库允许你做一些事情,比如加载BMP以外的图像文件,渲染TTF字体,以及播放音乐。您可以设置SDL_image来加载PNG文件,这可以为您节省大量的磁盘空间。...您需要做的第一件事是下载SDL_image头文件和二进制文件。您可以在SDL_image网站[1]上找到它们 ? 在设置好SDL_image之后,我们将介绍如何使用SDL创建加载PNG。...//使用SDL、SDL_image、标准IO和字符串。...对于SDL_ttf,或者SDL_mixer,我们也要做同样的事情。...gWindow = SDL_CreateWindow( "SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED
事件驱动编程 除了在屏幕上放置图像外,游戏还要求您处理用户的输入。你可以通过SDL使用事件处理系统来实现这一点。...SDL_PollEvent所做的工作是从事件队列中获取最近的事件,并将事件中的数据放入我们传递到函数中的SDL_Event中。 ? SDL_PollEvent会一直从队列中抽取事件,直到队列清空。...参考资料 [1] SDL_Event: https://wiki.libsdl.org/SDL_Event?...highlight=%28SDL_Event%29 [2] 按键按下: https://wiki.libsdl.org/SDL_KeyboardEvent?...highlight=%28SDL_JoyButtonEvent%29 [5] SDL_PollEvent: https://wiki.libsdl.org/SDL_PollEvent?
//Using SDL, SDL_image, SDL_ttf, standard IO, strings, and string streams #include SDL.h> #include SDL_image.h> #include SDL_ttf.h> #include #include #include 在本教程中,我们将使用字符串流...//Main loop flag bool quit = false; //Event handler SDL_Event e; //Set text color as black SDL_Color...//Clear screen SDL_SetRenderDrawColor( gRenderer, 0xFF, 0xFF, 0xFF, 0xFF ); SDL_RenderClear( gRenderer...原文链接[3] 「关注我的公众号:编程之路从0到1」 Reference [1] SDL_GetTicks: http://wiki.libsdl.org/SDL_GetTicks [2] 这里: http
//左上角视口 SDL_Rect topLeftViewport; topLeftViewport.x = 0;...这很简单,只要创建一个宽度/高度为屏幕一半的矩形,然后将这个区域传递给 SDL_RenderSetViewport[1]。在该调用之后进行的任何渲染都将在给定的视口所定义的区域内进行渲染。...//右上角视窗 SDL_Rect topRightViewport; topRightViewport.x = SCREEN_WIDTH...原文链接[3] 关注我的公众号:编程之路从0到1 参考资料 [1] SDL_RenderSetViewport: http://wiki.libsdl.org/SDL_RenderSetViewport.../tutorials/SDL/09_the_viewport/index.php
幸运的是,SDL提供了一种使用颜色键控的简单方法来实现这一点。...SDL_SetColorKey( loadedSurface, SDL_TRUE, SDL_MapRGB( loadedSurface->format, 0, 0xFF, 0xFF )...SDL Error: %s\n", path.c_str(), SDL_GetError() ); } else { //获取图片尺寸...SDL subsystems IMG_Quit(); SDL_Quit(); } 而这里是deallocators。...参考资料 [1] SDL_SetColorKey: https://wiki.libsdl.org/SDL_SetColorKey [2] SDL_MapRGB: https://wiki.libsdl.org
SDL_Surface* loadSurface( std::string path ){ //在指定路径加载图像 SDL_Surface* loadedSurface = SDL_LoadBMP...在SDL事件[1]里面有一个SDL Keyboard事件[2],它包含了按键事件的信息。在这个事件中,有一个SDL Keysym[3],它包含了被按下的键的信息。...参考资料 [1] SDL事件: https://wiki.libsdl.org/SDL_Event?...highlight=%28SDL_Event%29 [2] SDL Keyboard事件: https://wiki.libsdl.org/SDL_KeyboardEvent [3] SDL Keysym...: https://wiki.libsdl.org/SDL_Keysym [4] SDL Keycode: https://wiki.libsdl.org/SDL_Keycode [5] 这里: http
关于SDL如何处理键状态,有一点很重要,那就是你仍然需要一个事件循环运行。...SDL的内部键状态每次调用SDL_PollEvent[1]时都会更新,所以在检查键状态之前要确保你已经轮询了队列上的所有事件。 这里我们设置了要渲染的纹理。...首先,我们使用 SDL_GetKeyboardState[2]获得一个指向按键状态数组的指针。所有键的状态都是由 SDL_Scancode[3] 排序的。...参考资料 [1] SDL_PollEvent: http://wiki.libsdl.org/SDL_PollEvent [2] SDL_GetKeyboardState: http://wiki.libsdl.org.../SDL_GetKeyboardState [3] SDL_Scancode: http://wiki.libsdl.org/SDL_Scancode [4] SDL_Keycode: http:/
* clip = NULL, double angle = 0.0, SDL_Point* center = NULL, SDL_RendererFlip flip = SDL_FLIP_NONE );...与其删除我们将来可能需要的代码,不如将它包在if定义的语句中,这样如果我们不包含SDL_ttf,编译器将忽略它。它检查SDL_TTF_MAJOR_VERSION宏是否被定义。...在这种情况下,它说如果SDL_ttf没有被定义,忽略这段代码。...SDL Error: %s\n", SDL_GetError() ); }else{ //Get image dimensions mWidth.../tutorials/SDL/17_mouse_events/17_mouse_events.zip [3] 原文链接: http://www.lazyfoo.net/tutorials/SDL/17
TrueType字体 使用SDL渲染文本的一种方法是使用扩展库SDL_ttf。SDL_ttf允许你从TrueType字体中创建图像,我们将在这里使用它从字体文本中创建纹理。...// 使用SDL、SDL_image、SDL_ttf、标准IO、math和string #include SDL.h> #include SDL_image.h> #include SDL_ttf.h...> #include #include #include 要使用 SDL_ttf,你必须设置 SDL_ttf 扩展库[1],就像你 设置 SDL_image...* clip = NULL, double angle = 0.0, SDL_Point* center = NULL, SDL_RendererFlip flip = SDL_FLIP_NONE );.../docs/SDL_ttf/SDL_ttf_35.html [4] TTF_init: http://www.libsdl.org/projects/SDL_ttf/docs/SDL_ttf_8.html
SDL提供了数种控制图像、声音、输出入的函数,让开发者只要用相同或是相似的代码就可以开发出跨多个平台(Linux、Windows、Mac OS X等)的应用软件。...解压编译 wbyq@wbyq:~/work_pc$ tar xvf /mnt/hgfs/linux-share-dir/SDL2-2.0.12.tar.gz wbyq@wbyq:~/work_pc/SDL2...├── SDL_config.h │ ├── SDL_cpuinfo.h │ ├── SDL_egl.h │ ├── SDL_endian.h │ ├──...SDL_quit.h │ ├── SDL_rect.h │ ├── SDL_render.h │ ├── SDL_revision.h │ ├── SDL_rwops.h...SDL_Init(SDL_INIT_VIDEO) !
mTexture, red, green, blue ); } 设置纹理调制就像调用SDL_SetTextureColorMod[1]一样简单。...你可能已经注意到 SDL_SetTextureColorMod 接受 Uint8 作为颜色组件的参数。Uint8是一个无符号的8位整数。这意味着它可以从0到255。...quit ) { //Handle events on queue while( SDL_PollEvent( &e ) !...参考资料 [1] SDL_SetTextureColorMod: http://wiki.libsdl.org/SDL_SetTextureColorMod [2] 这里: http://www.lazyfoo.net.../SDL/12_color_modulation/index.php
拓展: SDL(Simple DirectMedia Layer)是一个跨平台的底层开发库,提供操作诸如音频、键盘、鼠标、游戏杆以及显卡等硬件的方法,被很多多媒体播放器、模拟器和流行游戏所使用,SDL支持...Windows、MacOS、Linux、iOS以及Android,也就是说你目所能及的几乎所有平台它都能运行,并且SDL是开源的,完全由C语言编写,可以在C/C++以及众多主流编程语言中被使用。...使用SDL来显示YUV数据的大概步骤是这样的: 第一步,初始化SDL视频子系统并定义YUVOverlay: SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO|SDL_INIT_TIMER..., SDL_YUY2_OVERLAY, screen); 第二步,将YUV数据拷贝到YUVOverlay中(需加锁): SDL_LockYUVOverlay...,显示: SDL_DisplayYUVOverlay(bmp, &rect); 当然,有时候YUV数据(上面的变量yuvdata)的各个分量跟SDL的定义方式不同,需要调换次序,总体而言大概如下图所示:
* clip = NULL, double angle = 0.0, SDL_Point* center = NULL, SDL_RendererFlip flip = SDL_FLIP_NONE );...void LTexture::render( int x, int y, SDL_Rect* clip, double angle, SDL_Point* center, SDL_RendererFlip...SDL_RendererFlip flipType = SDL_FLIP_NONE; 在进入主循环之前,我们声明变量来跟踪旋转角度和翻转类型。...//Clear screen SDL_SetRenderDrawColor( gRenderer, 0xFF, 0xFF, 0xFF, 0xFF ); SDL_RenderClear( gRenderer...参考资料 [1] SDL翻转枚举: http://wiki.libsdl.org/SDL_RendererFlip [2] SDL_RenderCopyEx: http://wiki.libsdl.org
//Using SDL, SDL_image, SDL_mixer, standard IO, and strings #include SDL.h> #include SDL_image.h> #...//Initialize SDL if( SDL_Init( SDL_INIT_VIDEO | SDL_INIT_AUDIO ) < 0 ) { printf( "SDL could not initialize...原文链接[20] 「关注我的公众号:编程之路从0到1」 ?.../SDL_mixer_85.html [6] Mix_OpenAudio: http://www.libsdl.org/projects/SDL_mixer/docs/SDL_mixer_11.html.../docs/SDL_mixer_72.html [16] Mix_ResumeMusic: http://www.libsdl.org/projects/SDL_mixer/docs/SDL_mixer
//Initialize SDL if( SDL_Init( SDL_INIT_VIDEO | SDL_INIT_JOYSTICK | SDL_INIT_HAPTIC ) < 0 ) { printf...SDL Error: %s\n", SDL_GetError() ); } } } } 在我们初始化操纵杆之后,我们需要在打开的操纵杆上使用SDL_HapticOpenFromJoystick...原文链接[8] 「关注我的公众号:编程之路从0到1」 Reference [1] SDL_HapticOpenFromJoystick: http://wiki.libsdl.org/SDL_HapticOpenFromJoystick...[2] SDL_HapticRumbleInit: http://wiki.libsdl.org/SDL_HapticRumbleInit [3] SDL_HapticClose: http://wiki.libsdl.org.../SDL_HapticClose [4] SDL_HapticRumblePlay: http://wiki.libsdl.org/SDL_HapticRumblePlay [5] SDL_JoyButtonEvent
//窗口渲染器 SDL_Renderer* gRenderer = NULL; //当前显示的纹理 SDL_Texture* gTexture = NULL; SDL中的纹理有自己的数据类型,直观地称为...SDL_Texture。...//创建窗口 gWindow = SDL_CreateWindow( "SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED...原文链接[9] 关注我的公众号:编程之路从0到1 参考资料 [1] SDL_CreateRenderer: https://wiki.libsdl.org/SDL_CreateRenderer [2].../SDL_DestroyTexture [5] SDL_RenderClear: https://wiki.libsdl.org/SDL_RenderClear [6] SDL_RenderCopy:
几何图形渲染 除了新的纹理API,SDL还有新的基元渲染调用作为其渲染API[1]的一部分。因此,如果你需要渲染一些基本的形状,而你又不想为它们创建额外的图形,SDL可以为你省力。...这个对SDL_SetRenderDrawColor的调用将绘图颜色设置为不透明的红色。 设置好矩形和颜色后,调用SDL_RenderFillRect[2]来绘制矩形。...还有一点要知道的是,SDL从左上角渲染矩形、表面和纹理。 下面是使用SDL_RenderDrawLine[4]绘制一条像素细线的代码。.../SDL_RenderFillRect [3] SDL_RenderDrawRect: https://wiki.libsdl.org/SDL_RenderDrawRect [4] SDL_RenderDrawLine...: https://wiki.libsdl.org/SDL_RenderDrawLine [5] SDL_RenderDrawPoint: https://wiki.libsdl.org/SDL_RenderDrawPoint
一、SDL 视频显示函数 1、SDL_Init 函数 使用 SDL 开发库 的 功能 之前 , 都要先 初始化 SDL 系统环境 ; 调用 SDL_Init() 函数 , 可以初始化 SDL 系统上下文环境...SDL_INIT_TIMER | SDL_INIT_AUDIO | SDL_INIT_VIDEO | SDL_INIT_EVENTS | \ SDL_INIT_JOYSTICK...); 2、SDL_Quit 函数 SDL_Init 函数 的作用是 初始化 要使用的各个子系统 , 使用完毕后需要退出 , SDL_Quit 函数 就是退出 SDL 系统 时需要调用的函数 ; SDL_Quit...SDL 环境 , 用于播放视频 SDL_Init(SDL_INIT_VIDEO); // 创建 SDL_Window 窗口对象 window = SDL_CreateWindow...纹理 是基于 SDL_Renderer 渲染器 对象创建 ; 二、SDL 窗口绘制 - 代码示例 1、SDL 窗口绘制代码 这是在上一篇博客 【FFmpeg】SDL 开发环境搭建 ( SDL 简介 |
void LTexture::setBlendMode( SDL_BlendMode blending ){ //设置混合功能 SDL_SetTextureBlendMode( mTexture...( mTexture, alpha ); } 下面是实际工作的SDL函数。...setBlendMode中的SDL_SetTextureBlendMode[1]允许我们启用混合,SDL_SetTextureAlphaMod[2]允许我们设置整个纹理的alpha量。...//Clear screen SDL_SetRenderDrawColor( gRenderer, 0xFF, 0xFF, 0xFF, 0xFF ); SDL_RenderClear( gRenderer...参考资料 [1] SDL_SetTextureBlendMode: http://wiki.libsdl.org/SDL_SetTextureBlendMode [2] SDL_SetTextureAlphaMod
领取专属 10元无门槛券
手把手带您无忧上云