SDL2 学习之路 - 01(SDL库导入vs2022和创建一个窗口)

 下载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

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

平面海螺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值