Microsoft Visual Studio2019环境下配置SDL开发环境
Simple DirectMedia Layer is a cross-platform development library designed
to provide low level access to audio, keyboard, mouse, joystick, and graphics
hardware via OpenGL and Direct3D. It is used by video playback software,
emulators, and popular games including Valve’s award winning catalog
and many Humble Bundle games.
SDL(Simple DirectMedia Layer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成。SDL提供了数种控制图像、声音、输出入的函数,让开发者只要用相同或是相似的代码就可以开发出跨多个平台(Linux、Windows、Mac OS X等)的应用软件。目前SDL多用于开发游戏、模拟器、媒体播放器等多媒体应用领域。
SDL使用GNU宽通用公共许可证为授权方式,意指动态链接(dynamic link)其库并不需要开放本身的源代码。因此诸如《雷神之锤4》等商业游戏也使用SDL来开发。
SDL库的作用说白了就是封装了复杂的视音频底层操作,简化了视音频处理的难度。
下载
下载SDL2-devel-2.24.0-VC.zip版本,或者自己编译。
配置
系统环境变量配置
附加包含目录的配置
链接器-附加库目录
代码
通过#pragma comment(lib,"SDL2.lib")
引用,项目右键Build,编译成功。
#define SDL_MAIN_HANDLED
//需要加上这句话,否则会出错
//显示 :无法解析的外部符号 _main,该符号在函数 "int __cdecl invoke_main(void)" (? invoke_main@@YAHXZ) 中被引用
#include <iostream>
#include "SDL.h"
using namespace std;
#pragma comment(lib,"SDL2.lib")
//由于SDL内部重新定义了main,因此main函数需要写成如下形式
int main(int argc, char* argv[])
{
SDL_Init(SDL_INIT_VIDEO);
SDL_Window* window;
SDL_Renderer* renderer;
window = SDL_CreateWindow(
"SDL2 Draw Window", // window title
SDL_WINDOWPOS_UNDEFINED, // initial x position
SDL_WINDOWPOS_UNDEFINED, // initial y position
640, // width, in pixels
480, // height, in pixels
SDL_WINDOW_SHOWN // flags - see below
);
if (window == NULL) {
printf("Could not create window: %s\n", SDL_GetError());
return 1;
}
renderer = SDL_CreateSoftwareRenderer(SDL_GetWindowSurface(window));
SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
SDL_RenderClear(renderer);
SDL_SetRenderDrawColor(renderer, 15, 23, 44, 255);
SDL_RenderDrawPoint(renderer, 10, 10);
SDL_RenderPresent(renderer);
SDL_UpdateWindowSurface(window);
bool quit = false;
SDL_Event event;
while (!quit) {
SDL_WaitEvent(&event);
switch (event.type) {
case SDL_QUIT://退出事件
SDL_Log("quit");
quit = true;
break;
default:
SDL_Log("event type:%d", event.type);
}
}
//destory renderer
if (renderer) {
SDL_DestroyRenderer(renderer);
}
// Close and destroy the window
SDL_DestroyWindow(window);
// Clean up
SDL_Quit();
return 0;
}
找不到SDL2.dll
找不到SDL2.dll,把SDL2-devel-2.24.0-VC\SDL2-2.24.0\lib\x64
目录下的SDL2.dll
拷贝到Debug目录。
添加动态库后,重新运行
其它问题
- #define SDL_MAIN_HANDLED 需要加上这句话,否则会出错
- 显示 :无法解析的外部符号 _main,该符号在函数 “int __cdecl invoke_main(void)” (?invoke_main@@YAHXZ) 中被引用
- 由于SDL内部重新定义了main,因此main函数需要写成如下形式 int main(int argc,char* argv[])
- 添加 #define SDL_MAIN_HANDLED 这个之后,即使main函数为空,也不会报错