SDL学习笔记之一
来源:互联网 发布:有网络浏览器不能上网 编辑:程序博客网 时间:2024/06/05 22:52
转自:http://blog.csdn.net/eplaylity/article/details/3454431
1. 初始化SDL:SDL_Init(mode);
mode:SDL_INIT_TIMER
SDL_INIT_AUDIO
SDL_INIT_VIDEO
SDL_INIT_CDROM
SDL_INIT_JOYSTICK
SDL_INIT_NOPARACHUTE
SDL_INIT_EVENTTHREAD
SDL_INIT_EVERYTHING
2. 获取出错表达式:
SDL_GetError();
3. 退出程序,清除系统:SDL_Quit();
atexit(SDL_Quit);
4. 在SDL里,一切皆表面!
SDL_Surface *screen;
screen = SDL_SetVideoMode(800,600,32,SDL_HWSURFACE|SDL_DOUBLEBUF);
最后一个标志位:
SDL_SWSURFACE 在系统内存创建视频表面(软件);
SDL_HWSURFACE 在显存里创建视频表面(硬件);
SDL_ASYNCBLIT 启用异步更新显示表面,会拖慢单处理器的位图复制,在SMP中却会加速。
SDL_ANYFORMAT 在指定无效BPP时也要使用,而不要SDL用投影表面模拟。
SDL_HWPALETTE 指定SDL独占访问调色板,不然你用SDL_SetColors或SDL_SetPalette时,并不一定总会会得到所要的颜色。
SDL_DOUBLEBUF 启用硬件双缓存,必须和SDL_HWSURFACE同时使用。调用SDL_Flip可以交换缓冲并更新显示,不然SDL_Flip只是在整个屏幕上执行SDL_UpdateRect。
SDL_FULLSCREEN 全屏模式。若硬件分辨率不支持,便会用下一个更高点的分辨率在一个黑背景中心显示窗口。
SDL_OPENGL 创建一个OpenGL渲染环境。在此之前,需要用SDL_GL_SetAttribute预先设置OpenGL显示属性。
SDL_OPENGLBLIT 同上创建一个GLRC,但允许普通的块复制操作。
SDL_RESIZABLE 创建一个可调整大小的窗口。当窗口大小被改变时,会有一个SDL_VIDEORESIZE事件生成,然后,可以用新的尺寸调用SDL_SetVideoMode。
SDL_NOFRAME 若可能,SDL_NOFRAME会生成一个无标题栏无边框修饰的窗口。全屏模式自动带此属性。
5. SDL数据类型
Uint8 等同一个unsigned char;
Uint16/32/64 16/32/64位无符号整型;
Sint8/16/32/64 同上,相应的有符号类型;
6. 有时,一方面初始化失败,还可以继续:SDL_WasInit()。
if(SDL_WasInit() & SDL_INIT_AUDIO)sound = true;
7. 绘制像素的代码:
- void DrawPixel(SDL_Surface *screen,int x,int y,Uint8 R,Uint8 G,Uint8 B)
- {
- Unit32 color = SDL_MapRGB(screen->format,R,G,B);
- switch(screen->format->BytesPerPixel)
- {
- case 1: // Assuming 8-bpp
- {
- Uint8 *bufp;
- bufp = (Uint8 *)screen->pixels + y*screen->pitch + x;
- *bufp = color;
- }
- break;
- case 2: // Probable 15-bpp or 16-bpp
- {
- Uint16 *bufp;
- bufp = (Uint16 *)screen->pixels + y*screen->pitch + x*3;
- if(SDL_BYTEORDER == SDL_LIL_ENDIAN)
- {
- bufp[0] = color;
- bufp[1] = color>>8;
- bufp[2] = color>>16;
- }else{
- bufp[2] = color;
- bufp[1] = color>>8;
- bufp[0] = color>>16;
- }
- }
- break;
- case 4: // Probable 32-bpp
- {
- Uint32 *bufp;
- bufp = (Uint32 *)screen->pixels + y*screen->pitch/4 + x;
- *bufp = color;
- }
- break;
- }
- }
8. 绘图之前,有时需要锁住屏幕:SDL_LockSurface(screen)/SDL_UnlockSurface(screen);
if(SDL_MUSTLOCK(screen))SDL_LockSurface(screen);
if(SDL_MUSTLOCK(screen))SDL_UnlockSurface(screen);
9. SDL消息处理:
SDL_EVNET ent;
投递消息,直到没有消息:while(SDL_PollEvent(&ent)){};
消息类型:SDL_QUIT、SDL_KEYDOWN等;
键符映射:SDLK_XXX,比如SDLK_ESCAPE等;
ent.key.keysym.sym,包含在SDL_keysym.h文件里。
- SDL学习笔记之一
- SDL学习笔记之一
- [音视频播放] SDL学习笔记之一
- SDL库的学习笔记之一—devcpp环境配置
- SDL学习笔记
- SDL学习笔记
- SDL学习笔记一
- sdl学习笔记
- 【SDL】SDL学习笔记二 定时器
- SDL学习笔记之二
- ffmpeg和SDL学习笔记
- SDL学习笔记之二
- sdl环境安装学习笔记
- SDL学习笔记7--用SDL显示图像数据
- 【SDL】SDL学习笔记一 SDL的子系统的初始化和退出
- ffmpeg和SDL学习笔记(一)
- Opengl SDL工具开发 学习笔记 002
- SDL学习笔记四(事件处理)
- SDL 显示核心 SDL_Surface 操作
- SDL_WindowEventID
- SDL实现overlay方式双屏显示的应用流程分析(thinkvd开发日志)
- 详解 QT 中嵌入SDL教程
- 初学C语言者适合做的练习
- SDL学习笔记之一
- 计算机网络应用层 之 P2P
- ubuntu安装jdk全过程(仅供参考)
- SDL学习笔记之二
- 开通自己的博客,可以和大家交流知识,happy!
- SDL游戏教程第一课 课程基础
- SDL游戏教程第二课 坐标与块复制
- SDL游戏教程第三课 消息(Events)
- C#中internal关键字的作用