sdl库好用吗(sdl和qt开发区别)

sdl库好用吗(sdl和qt开发区别)

如果喜欢纸质的朋友,可以去某宝上买二手,我买过来的,几乎是新的,书籍内容蛮不错!

当然如果你喜欢看原标准的话,可以到ITU官网上去查看源文档:

https://www.itu.int/rec/T-REC-H/e

关于其它H系列标准都可以看。

一、SDL相关介绍:

首先下来介绍一下什么是SDL;SDL(Simple DirectMedia Layer)是一套开发源代码的跨平台多媒体开发库,使用c写出的;SDL它提供了多种控制图像、声音、输出输入的函数接口,让开发者只要用相同或者是相似的代码就可以开发出跨多个平台,比如说Linux、Windows、Mac Os 等操作系统平台;它的应用领域主要包括:游戏开发,模拟器、媒体播放器等多媒体应用领域。

关于更多SDL的详细了解,您可以访问官网进行更加详细的了解:

https://www.libsdl.org/

相关开发接口文档说明:

http://wiki.libsdl.org/Introduction

下面我们开始下载SDL并搭建windows开发环境,环境是基于qt平台上

下载SDL相关开发库:

https://www.libsdl.org/download-2.0.php

开发库下载

然后下面我从零开始搭建一个SDL工程(手把手的那种),实际动手操作,你只需按照下面的图片流程来就行:

1

2

3

4

最后我们这个工程就创建完毕,然后把刚才下载的SDL开发库放到当前工程目录下:

然后进行配置pro文件:

TEMPLATE=appCONFIG =consoleCONFIG-=app_bundleCONFIG-=qtSOURCES =main.cwin32{INCLUDEPATH =$$PWD/SDL2-2.0.16/includeLIBS =$$PWD/SDL2-2.0.16/lib/x86/SDL2.lib}

这个SDL2.lib库的路线是在:

最后整个工程就配置完成了。

二、两个demo实战演练:

首先简单演示一个SDL窗口显示,这个窗口是最原始的,啥都没有。

在做演示之前,非常有必要简单介绍一下相关接口和说明:

SDL子系统(SDL将功能分成下列数个子系统):

SDL_INIT_TIMER:定时器SDL_INIT_AUDIO:音频SDL_INIT_VIDEO:视频SDL_INIT_JOYSTICK:摇杆SDL_INIT_HAPTIC:触摸屏SDL_INIT_GAMECONTROLLER:游戏控制器SDL_INIT_EVENTS:事件SDL_INIT_EVERYTHING:包含上述所有选项

SDL Window显示:SDL视频显示函数简介:

SDL_Init():初始化SDL系统

SDL_CreateWindow():创建窗口SDL_Window

SDL_CreateRenderer():创建渲染器SDL_Renderer

SDL_CreateTexture():创建纹理SDL_Texture

SDL_UpdateTexture():设置纹理的数据

SDL_RenderCopy():将纹理的数据拷贝给渲染器

SDL_RenderPresent():显示

SDL_Delay():工具函数,用于延时

SDL_Quit():退出SDL系统

SDL Windows显示:SDL数据结构简介:

SDL_Window 代表了一个“窗口”

SDL_Renderer 代表了一个“渲染器”

SDL_Texture 代表了一个“纹理”

SDL_Rect 一个简单的矩形结构

注意:存储RGB和存储纹理的区别:

比如一个从左到右由红色渐变到蓝色的矩形,用
存储RGB的话就需要把矩形中每个点的具体颜色
值存储下来;而纹理只是一些描述信息,比如记
录了矩形的大小、起始颜色、终止颜色等信息,
显卡可以通过这些信息推算出矩形块的详细信息。所以相对于存储RGB而已,存储纹理占用的内存
要少的多。

好了有了上面的介绍,下面先演示第一个demo:

#include<stdio.h>#include<SDL.h>#undefmainintmain(){printf(“HelloWorld!\n”);SDL_Window*window=NULL;SDL_Init(SDL_INIT_VIDEO);window=SDL_CreateWindow(“SDLWindow”,SDL_WINDOWPOS_UNDEFINED,//这个让窗口显示在电脑正中间SDL_WINDOWPOS_UNDEFINED,640,480,SDL_WINDOW_OPENGL|SDL_WINDOW_RESIZABLE);if(!window){printf(“cannotcreatethewindow,error%s\n”,SDL_GetError());return1;}SDL_Delay(10000);SDL_DestroyWindow(window);SDL_Quit();return0;}

运行结果,现在这个窗口啥东西都没有:

这里稍微注意一些,要把动态库拷贝到当前构建的build文件下,不然运行会报错:

下面是在窗口里面添加了东西,这个添加流程是这样的:

下面是更为复杂的demo:

#include<stdio.h>#include<SDL.h>#undefmainintmain(){intrun=1;SDL_Window*window=NULL;SDL_Renderer*renderer=NULL;SDL_Texture*texture=NULL;SDL_Rectrect;//长方形,原点在左上角rect.w=50;//方块大小rect.h=50;SDL_Init(SDL_INIT_VIDEO);//初始化函数,可以确定希望激活的子系统window=SDL_CreateWindow(“2Window”,SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED,640,480,SDL_WINDOW_OPENGL|SDL_WINDOW_RESIZABLE);//创建窗口if(!window){return-1;}renderer=SDL_CreateRenderer(window,-1,0);//基于窗口创建渲染器if(!renderer){return-1;}texture=SDL_CreateTexture(renderer,SDL_PIXELFORMAT_RGBA8888,SDL_TEXTUREACCESS_TARGET,640,480);//创建纹理if(!texture){return-1;}intshow_count=0;while(run){rect.x=rand()`0;rect.y=rand()@0;SDL_SetRenderTarget(renderer,texture);//设置渲染目标为纹理SDL_SetRenderDrawColor(renderer,255,0,0,255);//纹理背景为黑色SDL_RenderClear(renderer);//清屏SDL_RenderDrawRect(renderer,&rect);//绘制一个长方形SDL_SetRenderDrawColor(renderer,0,255,255,255);//长方形为白色SDL_RenderFillRect(renderer,&rect);SDL_SetRenderTarget(renderer,NULL);//恢复默认,渲染目标为窗口SDL_RenderCopy(renderer,texture,NULL,NULL);//拷贝纹理到CPUSDL_RenderPresent(renderer);//输出到目标窗口上SDL_Delay(300);if(show_count >30){run=0;//不跑了}}SDL_DestroyTexture(texture);SDL_DestroyRenderer(renderer);SDL_DestroyWindow(window);//销毁窗口SDL_Quit();return0;}

最终演示效果:

总结:

发表评论

登录后才能评论