SDL2学习笔记(一):SDL2初步

    科技2022-07-29  226

    一、Windows系统下的安装

    MinGW ①安装MinGW并配置好环境变量; ②官网下载SDL for MinGW; ③将解压文件中的 .\i686-w64-mingw32\include\SDL2 复制到 .\MinGW\include ; //有的设备需要用x86_64-w64-mingw32中的文件,下同 ④将解压文件中的 .\i686-w64-mingw32\lib中的 .a 和 .la 们全都复制到 .\MinGW\lib 下面; ⑤将解压文件中的 .\i686-w64-mingw32\bin\SDL.dll 复制到源文件所在文件夹; ⑥编辑文件并编译,编译命令如下:

    gcc [filename] (-o [output]) -lmingw32 -lSDL2main -SDL2

    这里我是将它写成了 .bat 文件,即Windows批处理脚本,内容如下:

    cmd /c gcc %1 -o %2 -lmingw32 -lSDL2main -lSDL2

    当我们在控制台编译时,只需要像这样就可以啦( gccsdl 是我写的 .bat 文件):

    gccsdl HelloSDL.c HelloSDL.exe

    有一个点需要注意一下,在SDL.h中有如下宏定义:

    #if defined(SDL_MAIN_NEEDED) || defined(SDL_MAIN_AVAILABLE) #define main SDL_main #endif int SDL_main(int argc, char **argv)

    main()函数的标准写法只有两个:int main(void); 和 int main(int argc, char *argv[]);,这里可以看到SDL要求我们必须写成第二种。(亲身试验,写第一种会报错)

    VS & VC 我还没搞得定嘿嘿嘿以后再来

    二、基本的函数

    SDL初始化 /* SDL初始化函数 */ int SDL_Init(Uint32 flags); /******************************************** 其中flags为欲初始化的位标,一般有如下几种: SDL_INIT_TIMER (定时器) SDL_INIT_AUDIO (音频) SDL_INIT_VIDEO (视频) SDL_INIT_JOYSTICK (摇杆) SDL_INIT_HAPTIC (触摸屏) SDL_INIT_GAMECONTROLLER (游戏控制器) SDL_INIT_EVENTS (事件) SDL_INIT_NOPARACHUTE (不捕获关键信号(?)) SDL_INIT_EVERYTHING (包含上述所有选项) ********************************************/ SDL退出 /* SDL退出函數 */ void SDL_Quit(void); /***************************************************************** 我們來看看官方對这个函数的描述: “This function cleans up all initialized subsystems. You should call it upon all exit conditions.” (这个函数清除所有初始化的子系统。您应该在所有退出条件下调用它。) 实际上就是跟EasyX的closegraph()差不多的感觉嘛。 ******************************************************************/ 检测是否已初始化 /* 检测是否已经完成了初始化 */ Uint32 SDL_WasInit(Uint32 flags); /********************************************************************* 还是看官方注释: “This function returns a mask of the specified subsystems which have previously been initialized.” (这个函数返回先前已经初始化的指定子系统的掩码。) “If \c flags is 0, it returns a mask of all initialized subsystems.” (如果\c标志为0,则返回所有初始化子系统的掩码。)(这个\c是个啥玩意?) **********************************************************************/ 中途的装载 /* 中途的装载 */ int SDL_InitSubSystem(Uint32 flags); /******************************************* 这个很简单就不看官方注释了, 就是在SDL_Init()之后还想要装载东西用的函数。 ********************************************/ 中途的退出 /* 同上,有中途装载就有中途退出嘛 */ void SDL_QuitSubSystem(Uint32 flags); 错误信息报告 /* SDL错误信息报告 */ const char * SDL_GetError(void); /* 写入错误 */ int SDL_SetError(const char *fmt, ...); /* 清除错误 */ void SDL_ClearError(void);

    好,你看到这里我都水了2139个字了。最基础的部分到此结束,那我们下期精彩继续。

    Processed: 0.009, SQL: 8