SDL学习入门

2024-06-23 06:08
文章标签 学习 入门 sdl

本文主要是介绍SDL学习入门,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


1、搭建开发平台
    (1)sudo apt-get install libsdl1.2-dev
        最基本的开发包
    (2)sudo apt-get install libsdl-image1.2-dev
        关于图像的开发包
    (3)sudo apt-get install libsdl-mixer1.2-dev
        关于音频的开发包
    (4)sudo apt-get install libsdl-ttf2.0-dev
        关于文字的开发包
    安装好以上四个开发包,开发平台算是搭建好了
    
2、最有代表性的简单程序,包括图像,文字,音乐,注释如下:
[cpp] view plain copy print ?
  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3. #include <SDL/SDL.h>  
  4. #include <SDL/SDL_image.h>  
  5. #include <SDL/SDL_mixer.h>  
  6. #include <SDL/SDL_ttf.h>  
  7.   
  8. static SDL_Surface* screen;//SDL窗口  
  9.   
  10. int main(int argc, char *argv[])  
  11. {  
  12.   
  13.     int quit = 0;  
  14.     SDL_Surface *text_sur;//文字容器  
  15.     SDL_Surface *background;//图像容器  
  16.     SDL_Event event;  
  17.     SDL_Color color;  
  18.     SDL_Rect srect, drect;  
  19.     Mix_Music *bgsound;  
  20.     TTF_Font *font;  
  21.       
  22.     //初始化SDL  
  23.     if (SDL_Init(SDL_INIT_VIDEO||SDL_INIT_AUDIO) < 0)  
  24.     {  
  25.         fprintf(stderr, "SDL init error:%s\n", SDL_GetError());  
  26.         exit(0);  
  27.     }  
  28.     atexit(SDL_Quit);//注册退出时调用的操作  
  29.       
  30.       
  31.     //设置SDL屏幕大小  
  32.     screen = SDL_SetVideoMode(600, 400, 24, SDL_HWSURFACE);  
  33.     if (screen == NULL)  
  34.     {  
  35.         fprintf(stderr, "Set video mode failure:%s\n", SDL_GetError());  
  36.         exit(0);  
  37.     }  
  38.       
  39.     //设置SDL窗口标题  
  40.     SDL_WM_SetCaption("test", NULL);  
  41.    
  42.     /*显示图像*/  
  43.     background = IMG_Load("background.jpg");//导入图像文件,并将图像放入文字容器  
  44.     srect.x = 0;  
  45.     srect.y = 0;  
  46.     srect.w = background->w;  
  47.     srect.h = background->h;  
  48.     drect = srect;//设置截取范围  
  49.     SDL_BlitSurface(background, &srect, screen, &drect);//将图像容器放入SDL窗口  
  50.   
  51.     /*显示文字*/  
  52.     //初始化TTF  
  53.     if (TTF_Init() < 0)  
  54.     {  
  55.         fprintf(stderr, "TTF init error:%s\n", SDL_GetError());  
  56.         return;  
  57.     }  
  58.       
  59.     font = TTF_OpenFont("test.ttf", 40);//导入字体文件  
  60.     color.r = 255;  
  61.     color.g = 0;  
  62.     color.b = 0;//设置文字颜色  
  63.     text_sur=TTF_RenderText_Solid(font, "Hello, Welcome to GAME!!", color);//将文字放入文字容器  
  64.       
  65.     srect.x = 0;  
  66.     srect.y = 0;  
  67.     srect.w = text_sur->w;  
  68.     srect.h = text_sur->h;  
  69.       
  70.     drect.x = (600 - text_sur->w) / 2;  
  71.     drect.y = (400 - text_sur->h) / 2;  
  72.     drect.w = text_sur->w;  
  73.     drect.h = text_sur->h;//设置截取范围  
  74.     SDL_BlitSurface(text_sur, &srect, screen, &drect);//将文字容器放入SDL窗口  
  75.       
  76.     SDL_UpdateRect(screen, 0, 0, 600, 400);//更新SDL窗口,让新添加的容器显示  
  77.   
  78.     /*播放声音*/  
  79.     Mix_OpenAudio(44100, AUDIO_S16, 2, 4096);//打开音频  
  80.     bgsound = Mix_LoadMUS("bgsound.mp3");//导入声音文件  
  81.     Mix_PlayMusic(bgsound, -1);//播放音频  
  82.     while (quit == 0)  
  83.     {  
  84.         while (SDL_PollEvent(&event))  
  85.         {  
  86.             switch (event.type)  
  87.             {  
  88.              case SDL_QUIT:  
  89.                 Mix_CloseAudio();//关闭音频  
  90.                 quit = 1;  
  91.                 break;  
  92.              default:  
  93.                 break;  
  94.             }  
  95.         }  
  96.         SDL_Delay(100);  
  97.     }  
  98.       
  99.     return 0;  
  100. }  
#include <stdio.h>
#include <stdlib.h>
#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
#include <SDL/SDL_mixer.h>
#include <SDL/SDL_ttf.h>static SDL_Surface* screen;//SDL窗口int main(int argc, char *argv[])
{int quit = 0;SDL_Surface *text_sur;//文字容器SDL_Surface *background;//图像容器SDL_Event event;SDL_Color color;SDL_Rect srect, drect;Mix_Music *bgsound;TTF_Font *font;//初始化SDLif (SDL_Init(SDL_INIT_VIDEO||SDL_INIT_AUDIO) < 0){fprintf(stderr, "SDL init error:%s\n", SDL_GetError());exit(0);}atexit(SDL_Quit);//注册退出时调用的操作//设置SDL屏幕大小screen = SDL_SetVideoMode(600, 400, 24, SDL_HWSURFACE);if (screen == NULL){fprintf(stderr, "Set video mode failure:%s\n", SDL_GetError());exit(0);}//设置SDL窗口标题SDL_WM_SetCaption("test", NULL);/*显示图像*/background = IMG_Load("background.jpg");//导入图像文件,并将图像放入文字容器srect.x = 0;srect.y = 0;srect.w = background->w;srect.h = background->h;drect = srect;//设置截取范围SDL_BlitSurface(background, &srect, screen, &drect);//将图像容器放入SDL窗口/*显示文字*///初始化TTFif (TTF_Init() < 0){fprintf(stderr, "TTF init error:%s\n", SDL_GetError());return;}font = TTF_OpenFont("test.ttf", 40);//导入字体文件color.r = 255;color.g = 0;color.b = 0;//设置文字颜色text_sur=TTF_RenderText_Solid(font, "Hello, Welcome to GAME!!", color);//将文字放入文字容器srect.x = 0;srect.y = 0;srect.w = text_sur->w;srect.h = text_sur->h;drect.x = (600 - text_sur->w) / 2;drect.y = (400 - text_sur->h) / 2;drect.w = text_sur->w;drect.h = text_sur->h;//设置截取范围SDL_BlitSurface(text_sur, &srect, screen, &drect);//将文字容器放入SDL窗口SDL_UpdateRect(screen, 0, 0, 600, 400);//更新SDL窗口,让新添加的容器显示/*播放声音*/Mix_OpenAudio(44100, AUDIO_S16, 2, 4096);//打开音频bgsound = Mix_LoadMUS("bgsound.mp3");//导入声音文件Mix_PlayMusic(bgsound, -1);//播放音频while (quit == 0){while (SDL_PollEvent(&event)){switch (event.type){case SDL_QUIT:Mix_CloseAudio();//关闭音频quit = 1;break;default:break;}}SDL_Delay(100);}return 0;
}



问题:gcc main.c -o main编译时可能会出现如下错误:
[cpp] view plain copy print ?
  1. main.c:(.text+0x19): undefined reference to `SDL_Init'  
  2. main.c:(.text+0x22): undefined reference to `SDL_GetError'  
  3. main.c:(.text+0x50): undefined reference to `SDL_Quit'  
  4. main.c:(.text+0x79): undefined reference to `SDL_SetVideoMode'  
  5. main.c:(.text+0x8c): undefined reference to `SDL_GetError'  
  6. main.c:(.text+0xc7): undefined reference to `SDL_WM_SetCaption'  
  7. main.c:(.text+0xd3): undefined reference to `IMG_Load'  
  8. main.c:(.text+0x132): undefined reference to `SDL_UpperBlit'  
  9. main.c:(.text+0x137): undefined reference to `TTF_Init'  
  10. main.c:(.text+0x140): undefined reference to `SDL_GetError'  
  11. main.c:(.text+0x174): undefined reference to `TTF_OpenFont'  
  12. main.c:(.text+0x1a3): undefined reference to `TTF_RenderText_Solid'  
  13. main.c:(.text+0x24c): undefined reference to `SDL_UpperBlit'  
  14. main.c:(.text+0x279): undefined reference to `SDL_UpdateRect'  
  15. main.c:(.text+0x29d): undefined reference to `Mix_OpenAudio'  
  16. main.c:(.text+0x2a9): undefined reference to `Mix_LoadMUS'  
  17. main.c:(.text+0x2c1): undefined reference to `Mix_PlayMusic'  
  18. main.c:(.text+0x2d5): undefined reference to `Mix_CloseAudio'  
  19. main.c:(.text+0x2ec): undefined reference to `SDL_PollEvent'  
  20. main.c:(.text+0x2fc): undefined reference to `SDL_Delay'  
  21. collect2: ld returned 1 exit status  
main.c:(.text+0x19): undefined reference to `SDL_Init'
main.c:(.text+0x22): undefined reference to `SDL_GetError'
main.c:(.text+0x50): undefined reference to `SDL_Quit'
main.c:(.text+0x79): undefined reference to `SDL_SetVideoMode'
main.c:(.text+0x8c): undefined reference to `SDL_GetError'
main.c:(.text+0xc7): undefined reference to `SDL_WM_SetCaption'
main.c:(.text+0xd3): undefined reference to `IMG_Load'
main.c:(.text+0x132): undefined reference to `SDL_UpperBlit'
main.c:(.text+0x137): undefined reference to `TTF_Init'
main.c:(.text+0x140): undefined reference to `SDL_GetError'
main.c:(.text+0x174): undefined reference to `TTF_OpenFont'
main.c:(.text+0x1a3): undefined reference to `TTF_RenderText_Solid'
main.c:(.text+0x24c): undefined reference to `SDL_UpperBlit'
main.c:(.text+0x279): undefined reference to `SDL_UpdateRect'
main.c:(.text+0x29d): undefined reference to `Mix_OpenAudio'
main.c:(.text+0x2a9): undefined reference to `Mix_LoadMUS'
main.c:(.text+0x2c1): undefined reference to `Mix_PlayMusic'
main.c:(.text+0x2d5): undefined reference to `Mix_CloseAudio'
main.c:(.text+0x2ec): undefined reference to `SDL_PollEvent'
main.c:(.text+0x2fc): undefined reference to `SDL_Delay'
collect2: ld returned 1 exit status
原因:那是因为该程序用到四个静态库,分别为:
(1)SDL
(2)SDL_image
(3)SDL_ttf
(4)SDL_mixer
需用-l参数连起来才能编译得过,如:gcc main.c -lSDL -lSDL_image -lSDL_ttf -lSDL_mixer -o main

这篇关于SDL学习入门的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1086337

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

数论入门整理(updating)

一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题:

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多