SDL游戏之路(二十一)--声音
来源:互联网 发布:linux内核启动流程 编辑:程序博客网 时间:2024/05/01 07:45
声音
游戏中的音乐有两种1.背景音乐,2.音效。
定义一个声音类来管理:
#ifndef SKMUSIC_H_#define SKMUSIC_H_#include "SkComm.h"namespace sk_park {/**1:效果音乐 2:背景音乐**/typedef enum _SkMusicType {SK_MUSIC_TYPE_CHUNK = 1, SK_MUSIC_TYPE_MUSIC = 2,} SkMusicType;class SkMusic {public:SkMusic();virtual ~SkMusic();/**加载音乐文件**/int load(SkMusicType mType, const char * pPath);void start();void stop();void pause();private:SkMusicType m_mType;static Sint32 m_iMusicNum;Mix_Music* m_pMusic;Mix_Chunk* m_pChunk;};}extern sk_park::SkMusic g_SkMusic;#endif /* SKMUSIC_H_ */
实现如下:
#include "pch.h"#include "SkMusic.h"#include "SkFile.h"#include "SkString.h"using namespace sk_park;Sint32 SkMusic::m_iMusicNum = 0;SkMusic::SkMusic() {if (m_iMusicNum == 0) {int iRet = Mix_OpenAudio(22050, MIX_DEFAULT_FORMAT, 2, 4096);if (iRet == -1) {g_SkComm.log("[%s][%d]Mix_OpenAudio err = %d", __FILE__, __LINE__,iRet);g_SkComm.myexit();}}m_iMusicNum++;m_pMusic = NULL;m_pChunk = NULL;}SkMusic::~SkMusic() {if (m_pChunk != NULL) {Mix_FreeChunk(m_pChunk);m_pChunk = NULL;}if (m_pMusic != NULL) {Mix_FreeMusic(m_pMusic);m_pMusic = NULL;}m_iMusicNum--;if (m_iMusicNum == 0) {Mix_CloseAudio();}}int SkMusic::load(SkMusicType mType, const char * pPath) {SkString sPath = g_SkFile.getRootPath();sPath.append("/").append(pPath);m_mType = mType;if (SK_MUSIC_TYPE_CHUNK == m_mType) {m_pChunk = Mix_LoadWAV(sPath.c_str());if (m_pChunk != NULL) {return 0;} else {return -1;}} else {m_pMusic = Mix_LoadMUS(sPath.c_str());if (m_pMusic != NULL) {return 0;} else {return -1;}}return -1;}void SkMusic::start() {if (SK_MUSIC_TYPE_CHUNK == m_mType) {if (m_pChunk != NULL) {Mix_PlayChannel(-1, m_pChunk, 0);}} else {if (Mix_PlayingMusic() == false) {if (m_pMusic != NULL) {Mix_PlayMusic(m_pMusic, -1);}} else {if (Mix_PausedMusic() == 1) {Mix_ResumeMusic();} else {//Mix_PauseMusic();}}}}void SkMusic::stop() {if (SK_MUSIC_TYPE_MUSIC == m_mType) {Mix_HaltMusic();}}void SkMusic::pause() {if (SK_MUSIC_TYPE_MUSIC == m_mType) {Mix_PauseMusic();}}SkMusic g_SkMusic;
1 0
- SDL游戏之路(二十一)--声音
- SDL游戏之路(二十二)--声音-Windows Store App
- SDL游戏之路(十一)--按钮制作
- SDL游戏之路(二)--多平台支持--wp8
- SDL游戏之路(二十)--对话框-多行
- SDL游戏之路(十二)--游戏场景
- SDL游戏之路(八)--android+sdl+ndk+3d
- SDL游戏之路(九)--动画制作
- SDL游戏之路(十)--移动轨迹
- SDL游戏之路(十三)--中文显示
- SDL游戏之路(十四)--模拟键盘
- SDL游戏之路(十五)--英文输入法
- SDL游戏之路(十六)--中文输入法
- SDL游戏之路(十九)--对话框
- SDL游戏之路(一)--多平台支持--windows
- SDL游戏之路(三)--多平台支持--android
- SDL游戏之路(四)--多平台支持--mac
- SDL游戏之路(五)--多平台支持--ios
- 编程之美之二进制数中1的个数
- 23个GOF23设计模式的定义
- c语言数组指针的问题
- 黑马程序员_Java异常_Exception
- 黑马程序员_Java面向对象4
- SDL游戏之路(二十一)--声音
- 团队需要哪些培训
- 动态规划3:最大子段和问题到最大子矩阵问题(三):初探最大子矩阵之和问题
- Nginx CORS实现JS跨域
- 黑马程序员_Java_泛型(Generic)
- 11g的exp导出空表提示EXP-00011: SCOTT.TEST1 不存在
- UVA 10917 Walk Through the Forest SPFA
- 1258-Agri-net
- dede:channel 分页 & JS分页