路遥见人心,日久知马力

博客园 首页 新随笔 联系 订阅 管理

#include<SDL.h> 

0. 注意:在 c++ 或者 c 里见到 const char * 类型 、立刻反应到这是一个字符串、可以用 "hello world"之类的串进行赋值 

 

1 SDL_Window 结构

  表示窗口。 通过SDL_CreateWindow()进行创建

2 SDL_CreateWindow()--> SDL_Window*

注意到注释里写的玩意:

 

 

 title就不说了     x、y 是窗口的左上角的位置(y从上往下增大)、可以用SDL_WINDOWPOS_CENTERED来指定窗口居中

flags是标志位(c++里的各种标志位都能进行或运算、表示这个窗口具有或起来的全部性质)

3 SDL_Init()

  表示初始化哪些功能模块、如果全选可以给:SDL_INIT_EVERYTHING

4 SDL_Rect 结构

  表示一个正方块、初始化方式:

  1) c++风格的初始化列表:

    

  2) 结构体本来就能用的初始化方法:

    

  3)每个都点出来赋值

    

 

    (Note: 结构体的玩法就这么多、没类那么复杂!!)

 

4 SDL_Surface 结构

  表示一堆像素、可以理解成 2d 图片

5 SDL_FillRect()

  表示给某个 surface的某个矩形区域填充某种颜色

6 SDL_UpdateWindowSurface()

  表示更新window的surface内容到屏幕上

7 SDL_Event

  对事件的封装、其实可以 f12 点进去看一下、发现是个联合体(意味着同一时刻只有一个字段是有效的)

 

 

8 SDL_PollEvent()

  取到当前窗口的事件到事件对象中

 

代码与结果:

 

//#pragma comment(linker, "/subsystem:windows /entry:mainCRTStartup") //vs2019该语句无效
#define _CRT_SECURE_NO_WARNINGS
#pragma comment(lib, "win/x86/SDL2.lib")
#include<SDL.h>
#include <stdio.h>

//Screen dimension constants
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;

int main(int argc, char* args[])
{
    //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_EVERYTHING) < 0)
    {
        printf("SDL could not initialize! SDL_Error: %s\n", SDL_GetError());
    }
    else
    {
        //Create window
        window = SDL_CreateWindow("SDL Tutorial", 0,0, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
        if (window == NULL)
        {
            printf("Window could not be created! SDL_Error: %s\n", SDL_GetError());
        }
        else
        {
            //Get window surface
            screenSurface = SDL_GetWindowSurface(window);
            SDL_Rect rect;
            rect.x = 20;
            rect.y = 20;
            rect.w = 60;
            rect.h = 60;
            //Fill the surface color
            SDL_FillRect(screenSurface, &rect, SDL_MapRGB(screenSurface->format, 0x0f, 0x0F, 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;
}

 

 

参考:https://lazyfoo.net/tutorials/SDL/index.php

 

posted on 2022-10-23 22:43  只讲大白话  阅读(253)  评论(0)    收藏  举报