cocos2d-x播放背景音樂和戰鬥音效

cocos2d-x播放背景音樂和戰鬥音效

在遊戲中,音樂是一個不可缺少的部分,音樂分爲遊戲中的長時間的背景音樂和短的音效兩種,可以爲我們的遊戲增加效果。Cocos2d-x支持多種音樂格式mp3wav音樂格式

1.背景音樂

要使用一個音樂,首先要預加載這個音樂,預加載的方法如下

SimpleAudioEngine::sharedEngine()->preloadBackgroundMusic( CCFileUtils::fullPathFromRelativePath(MUSIC_FILE) );

MUSIC_FILE就是音樂文件相對Res文件夾的相對路徑

然後就可以播放了,播放的方法如下

SimpleAudioEngine::sharedEngine()->playBackgroundMusic(std::string(CCFileUtils::fullPathFromRelativePath(MUSIC_FILE)).c_str(), true);

第一個參數中的MUSIC_FILE就是音樂文件相對Res文件夾的相對路徑,然後再轉換爲絕對路徑,第二個參數就是是否循環播放,由於是背景音樂,我們定爲true

其他函數

SimpleAudioEngine::sharedEngine()->stopBackgroundMusic();//停止背景音樂,可以代一個布爾型參數,表示是否釋放音樂文件

SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();//暫停背景音樂

SimpleAudioEngine::sharedEngine()->rewindBackgroundMusic();//重頭調用背景音樂

SimpleAudioEngine::sharedEngine()->isBackgroundMusicPlaying()//返回布爾型參數,是否在放着背景音樂

SimpleAudioEngine::sharedEngine()->setBackgroundMusicVolume(0.5);//設置音量0.0-1.0

2.音效

使用音效,和使用音樂類似,也需要預加載,用法如下

SimpleAudioEngine::sharedEngine()->preloadEffect( CCFileUtils::fullPathFromRelativePath(EFFECT_FILE) );

EFFECT_FILE就是音樂的相對Res文件夾的相對路徑

然後播放就可以了

m_nSoundId=SimpleAudioEngine::sharedEngine()->playEffect(std::string(CCFileUtils::fullPathFromRelativePath(EFFECT_FILE)).c_str());

m_nSoundId=SimpleAudioEngine::sharedEngine()->playEffect(std::string(CCFileUtils::fullPathFromRelativePath(EFFECT_FILE)).c_str(), true);

和背景音樂一樣,第二個參數是可選的,如果是true就是循環播放,否則就是隻播一次

其他函數

SimpleAudioEngine::sharedEngine()->stopEffect(m_nSoundId);//停止音效,可以選擇單獨停掉一個音效,通過創建時的m_nSoundId停止

SimpleAudioEngine::sharedEngine()->stopAllEffects();//停止全部音效

SimpleAudioEngine::sharedEngine()->pauseEffect(m_nSoundId);//暫停單個音效

SimpleAudioEngine::sharedEngine()->resumeEffect(m_nSoundId);//重新開始音效

SimpleAudioEngine::sharedEngine()->pauseAllEffects();//暫停全部音效

SimpleAudioEngine::sharedEngine()->resumeAllEffects();//重新開始全部音效

SimpleAudioEngine::sharedEngine()->setEffectsVolume(0.5);//設置音效音量

SimpleAudioEngine::sharedEngine()->unloadEffect(std::string(CCFileUtils::fullPathFromRelativePath(EFFECT_FILE)).c_str());//卸載音效

最後要記住,在程序不需要音樂時,要SimpleAudioEngine::sharedEngine()->end();釋放sharedEngine()

我寫了一個播放音樂的類,在這裏和大家分享一下

//
//  SGPlayMusic.h
//  GameSanGuo
//
//  Created by 江南岸 on 13-5-16.
//
//

#define MUSIC_PLAY(__xxx__)     SGPlayMusic::sharePlayMusic()->playerMusicByType(__xxx__);
#define MUSIC_STOP              SGPlayMusic::sharePlayMusic()->stopMusic();
#define MUSIC_VOLUME(__xxxx__)  SGPlayMusic::sharePlayMusic()->setVolume(__xxxx__)
#define EFFECT_PLAY(__xxxx__,__yyyy__) SGPlayMusic::sharePlayMusic()->playEffectByType(__xxxx__, __yyyy__);
#define EFFECT_STOP SGPlayMusic::sharePlayMusic()->stopEffect();
#define EFFCT_VOLUME(__xxxx__) SGPlayMusic::sharePlayMusic()->setEffectVolume(__xxxx__);

#define MUSIC_PVP     "music/pvp.mp3"       //pvp音樂
#define MUSIC_NORMAL  "music/narmal.mp3"    //正常戰鬥音樂
#define MUSIC_BOSS    "music/boss.mp3"      //boss戰音樂
#define MUSIC_SCENE   "music/scene.mp3"     //場景音樂
#define MUSIC_TEST    "music/祁隆、莊心妍 - 一萬個捨不得.mp3"


#ifndef __GameSanGuo__SGPlayMusic__
#define __GameSanGuo__SGPlayMusic__

#include <iostream>
#include "SimpleAudioEngine.h"
#include "cocos2d.h"
using namespace cocos2d;
using namespace CocosDenshion;

class SGPlayMusic
{
private:
    float m_nMusicVolume;
    float m_nEffectVolume;
    
public:
    SGPlayMusic();
    ~SGPlayMusic();
    static SGPlayMusic *sharePlayMusic();

    //播放音樂
    void playerMusicByType(const char* musicName);
    //停止音樂
    void stopMusic();
    //改變音樂音量
    void setVolume(float volume);
    //暫停背景音樂
    void pauseMusic();
    //重新播放背景音樂
    void rewindMusic();
    
    //播放音效
    void playEffectByType(bool isLoop, const char *effectName);
    //停止音效
    void stopEffect();
    //改變音效音量
    void setEffectVolume(float volume);
    //停止某個音效
    void stopEffect(unsigned int effectId);
    //重新播放音效
    void rewindEffect(unsigned int effectId);
    
};


#endif /* defined(__GameSanGuo__SGPlayMusic__) */

//
//  SGPlayMusic.cpp
//  GameSanGuo
//
//  Created by 江南岸 on 13-5-16.
//
//

#include "SGPlayMusic.h"
static SGPlayMusic *playMusic = NULL;

SGPlayMusic::SGPlayMusic()
{
    m_nMusicVolume = 0.5;
    m_nEffectVolume = 0.5f;
}

SGPlayMusic::~SGPlayMusic()
{
    //卸載
    SimpleAudioEngine::sharedEngine()->end();
}

SGPlayMusic* SGPlayMusic::sharePlayMusic()
{
    if(NULL == playMusic)
    {
        playMusic = new SGPlayMusic();
    }
    
    return playMusic;
}

#pragma mark - ------ 播放音樂 -------

void SGPlayMusic::playerMusicByType(const char* musicName)
{
    SimpleAudioEngine::sharedEngine()->preloadBackgroundMusic(CCFileUtils::sharedFileUtils()->fullPathFromRelativePath(musicName));
    SimpleAudioEngine::sharedEngine()->playBackgroundMusic(CCFileUtils::sharedFileUtils()->fullPathFromRelativePath(musicName), true);
}

void SGPlayMusic::setVolume(float volume)
{
    m_nMusicVolume = volume;
    SimpleAudioEngine::sharedEngine()->setBackgroundMusicVolume(m_nMusicVolume);
}

void SGPlayMusic::stopMusic()
{
    SimpleAudioEngine::sharedEngine()->stopBackgroundMusic();
}

void SGPlayMusic::rewindMusic()
{
    SimpleAudioEngine::sharedEngine()->rewindBackgroundMusic();
}

void SGPlayMusic::pauseMusic()
{
    SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
}

#pragma mark - ------ 播放音效 ------

void SGPlayMusic::playEffectByType(bool isLoop, const char *effectName)
{
    SimpleAudioEngine::sharedEngine()->preloadEffect(CCFileUtils::sharedFileUtils()->fullPathFromRelativePath(effectName));
    SimpleAudioEngine::sharedEngine()->playEffect(effectName, isLoop);
}

void SGPlayMusic::stopEffect()
{
    SimpleAudioEngine::sharedEngine()->stopAllEffects();
}

void SGPlayMusic::setEffectVolume(float volume)
{
    m_nEffectVolume = volume;
    SimpleAudioEngine::sharedEngine()->setEffectsVolume(m_nEffectVolume);
}

void SGPlayMusic::stopEffect(unsigned int effectId)
{
    SimpleAudioEngine::sharedEngine()->stopEffect(effectId);
}

void SGPlayMusic::rewindEffect(unsigned int effectId)
{
    SimpleAudioEngine::sharedEngine()->resumeEffect(effectId);
}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章