建议使用MinGW搭建Windows上的C语言开发环境,详情可阅读译者博客《程序员C语言快速上手——环境准备篇(一)》 设置好SDL后,我们将介绍如何创建SDL2窗口。...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
//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...这意味着定时器的时间仅是SDL_GetTicks返回程序开始以来的当前时间。...//Clear screen SDL_SetRenderDrawColor( gRenderer, 0xFF, 0xFF, 0xFF, 0xFF ); SDL_RenderClear( gRenderer
幸运的是,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_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的内部键状态每次调用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_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
文章前言 Foritify默认导出的报告为英文版本,为了便于开发人员查看我们可以通过更改Foritify语言配置来更改扫描报告导出时采用的语言 操作流程 Step 1:在DOS窗口下,进入Fortify...:执行scapostinstall Step 3:选择 2——Settings Step 3:选择1——General Step 4:选择1——Locale Step 5:输入报告所需要指定的语言...En--英文 Ko--韩文 Ja--日文 zh_CN--简中 zh_TW--繁中 报告导出 更改语言为中文之后导出的报告如下所示: Executive Summary OWASP Top Ten
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
* 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
触觉设备的数据类型直观地命名为SDL_haptic。...//Initialize SDL if( SDL_Init( SDL_INIT_VIDEO | SDL_INIT_JOYSTICK | SDL_INIT_HAPTIC ) < 0 ) { printf...SDL Error: %s\n", SDL_GetError() ); } } } } 在我们初始化操纵杆之后,我们需要在打开的操纵杆上使用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
//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.../SDL_mixer_85.html [6] Mix_OpenAudio: http://www.libsdl.org/projects/SDL_mixer/docs/SDL_mixer_11.html...projects/SDL_mixer/docs/SDL_mixer_56.html [10] Mix_FreeChunk: http://www.libsdl.org/projects/SDL_mixer.../docs/SDL_mixer_72.html [16] Mix_ResumeMusic: http://www.libsdl.org/projects/SDL_mixer/docs/SDL_mixer
你可以通过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?
//窗口渲染器 SDL_Renderer* gRenderer = NULL; //当前显示的纹理 SDL_Texture* gTexture = NULL; SDL中的纹理有自己的数据类型,直观地称为...SDL_Texture。...//创建窗口 gWindow = SDL_CreateWindow( "SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED.../SDL_DestroyTexture [5] SDL_RenderClear: https://wiki.libsdl.org/SDL_RenderClear [6] SDL_RenderCopy:...https://wiki.libsdl.org/SDL_RenderCopy [7] SDL_RenderPresent: https://wiki.libsdl.org/SDL_RenderPresent
几何图形渲染 除了新的纹理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
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
我们的系统运行SDL 2的应用程序时,要能够找到dll文件,我们从C盘的SDL的lib的x86中复制SDL2.dll,放在我们工程的vcxproj文件所在的位置。...* window = NULL; //窗口的表面 SDL_Surface* screenSurface = NULL; //初始化SDL if (SDL_Init(SDL_INIT_VIDEO...SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);...= SDL_GetWindowSurface(window); //表面涂上白色 SDL_FillRect(screenSurface, NULL, SDL_MapRGB(screenSurface...(2000); //销毁窗口 SDL_DestroyWindow(window); //退出SDL子系统 SDL_Quit(); return 0; }
由于SDL 2中的图像是典型的SDL_Textures,所以在SDL中的动画是一个接一个地显示纹理的不同部分(或不同的整体纹理)。...//走路动画 const int WALKING_ANIMATION_FRAMES = 4; SDL_Rect gSpriteClips[ WALKING_ANIMATION_FRAMES ]; LTexture...//为窗口创建垂直同步渲染器 gRenderer = SDL_CreateRenderer( gWindow, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC...SDL Error: %s\n", SDL_GetError() ); success = false; } 对于本篇(以及未来的教程),我们要使用垂直同步。...[2] 原文链接: http://www.lazyfoo.net/tutorials/SDL/14_animated_sprites_and_vsync/index.php
领取专属 10元无门槛券
手把手带您无忧上云