SDL2 学习之路 - 01(SDL库导入vs2022和创建一个窗口)
下载地址: https://github.com/libsdl-org/SDL/releases/download/release-2.28.1/SDL2-devel-2.28.1-VC.zip将下载好的SDL库保存到适当的位置打开vs2022,创建一个空项目右键项目名,点击“属性”设置包含目录和库目录,点击“编辑” 添加SDL库中的include目录的路径新建一个源文件,引入头文件初始
文章共701字 · 阅读需要大约3分钟
一键AI生成摘要,助你高效阅读
问答
·
下载SDL库
下载地址:
https://github.com/libsdl-org/SDL/releases/download/release-2.28.1/SDL2-devel-2.28.1-VC.zip
vs2022配置SDL库
将下载好的SDL库保存到适当的位置
打开vs2022,创建一个空项目
右键项目名,点击“属性”
设置包含目录和库目录,点击“编辑”
添加SDL库中的include目录的路径
设置“附加依赖库”,添加“lib\x64”目录下后缀为lib的文件
创建一个窗口
新建一个源文件,引入头文件
#include<SDL.h>
int main(int argc,char* argv[]){ //main函数必须有参数
return 0;
}
初始化SDL(如果不初始化,则无法调用任何SDL函数),失败将打印错误信息
if(SDL_Init(SDL_INIT_VIDEO)<0){
SDL_Log("SDL无法初始化,错误:%s\n",SDL_GetError());
}
创建窗口
SDL_Window* window=NULL;
//SDL_CreateWindow(String,int,int,int,int,SDL_WindowFlags)
//SDL_CreateWindow的传入参数依次为:标题,x坐标,y坐标(排除标题栏),宽,高,标志
window=SDL_CreateWindow("标题",0,0,640,480,SDL_WINDOW_SHOW);
if (window == NULL){
SDL_Log("窗口创建失败! 错误: %s\n", SDL_GetError());
}
获取窗口表面并绘制
SDL_Surface* screenSurface = NULL;
screenSurface = SDL_GetWindowSurface( window );
//填充为白色
SDL_FillRect( screenSurface, NULL, SDL_MapRGB( screenSurface->format, 0xFF, 0xFF, 0xFF ) );
//绘制后需要更新
SDL_UpdateWindowSurface( window );
//让窗口停留3000毫秒
SDL_Delay(3000);
销毁窗口
SDL_DestroyWindow(window);
SDL_Quit();
完整代码
#include<SDL.h>
//Screen dimension constants
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
int main(int argc, char* argv[]) {
//The window we'll be rendering to
SDL_Window* window = NULL;
//The surface contained by the window
SDL_Surface* screenSurface = NULL;
//Initialize SDL
if (SDL_Init(SDL_INIT_VIDEO) < 0){
SDL_Log("SDL could not initialize! SDL_Error: %s\n", SDL_GetError());
}
else{
//Create window
window = SDL_CreateWindow("title", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
if (window == NULL){
SDL_Log("Window could not be created! SDL_Error: %s\n", SDL_GetError());
}
else{
//Get window surface
screenSurface = SDL_GetWindowSurface(window);
//Fill the surface white
SDL_FillRect(screenSurface, NULL, SDL_MapRGB(screenSurface->format, 0xFF, 0xFF, 0xFF));
//Update the surface
SDL_UpdateWindowSurface(window);
//Hack to get window to stay up
SDL_Event e;
bool quit = false;
while (quit == false) {
while (SDL_PollEvent(&e)) {
if (e.type == SDL_QUIT) quit = true;
}
}
}
//Destroy window
SDL_DestroyWindow(window);
//Quit SDL subsystems
SDL_Quit();
return 0;
}
}
效果展示
参考文章
Lazy Foo' Productions - Hello SDL: Your First Graphics Window
更多推荐
已为社区贡献1条内容
所有评论(0)