大佬教程收集整理的这篇文章主要介绍了cocos2dx AudioEngine(声音播放)音效播放结束判断测试和背景音乐播放,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
由于simpleAudioENGIne在播放音效时无法获取状态也无法在播放完成后回调,造成音效在按键频繁时发声重叠。改mac版本的库对目前的我来说挑战难度太大。
于是百度了半天,发现3.6版本的cocos2dx有了新的声音播放库AudioENGIne。于是体验下,感觉还不错:
直接贴代码:
头文件:
#ifndef __macstudycocos2dx__newAudioENGInetest__
#define __macstudycocos2dx__newAudioENGInetest__
#include <stdio.h>
#include "cocos2d.h"
#include "audio/include/AudioENGIne.h"
USING_NS_CC;
using namespace experimental;
class newAudioENGIneTest:publicLayer,publicAudioENGIne{
public:
staticcocos2d::Scene* createScene();
virtualbool init();
@H_616_85@ // a SELEctor callBACk
void playCallBACk(cocos2d::Ref* pSender);//点击按钮后开始播放的回调函数
CREATE_FUNC(newAudioENGIneTest);
bool isplaying=false;//标记播放状态
void changer_playingstatus();//播放完成后的回调函数,用来更改播放状态
};
newAudioENGIneTest.cpp如下:
#endif /* defined(__macstudycocos2dx__newAudioENGInetest__) */
//
// newAudioENGIneTest.cpp
// macstudycocos2dx
// Created by WangWei on 15/6/23.
//
#include "newAudioENGIneTest.h"
// 'scene' is an autorelease object
auto scene =Scene::create();
// 'layer' is an autorelease object
auto layer =newAudioENGIneTest::create();
// add layer as a child to scene
scene->addChild(layer);
// return the scene
return scene;
}
@H_675_182@ bool newAudioENGIneTest::init()//////////////////////////////
// 1. super init first
if ( !Layer::init() )
return false;
}
Size visibleSize =Director::geTinstance()->getVisibleSize();
Vec2 origin =Director::geTinstance()->getVisibLeorigin();
@H_675_182@ auto menuitem=@H_229_8@menuItemFont::create("play wav",CC_CALLBACK_1(newAudioENGIneTest::playCallBACk,this));
//创建菜单项,点击时播放音效
menuitem->setPosition(Vec2(0,0));
// create menu,it's an autorelease object
auto menu =@H_766_53@menu
::create(menuitem,NULL);menu->setPosition(Vec2(visibleSize.width/2,visibleSize.height/2));
this->addChild(menu,1);
return true;
}
voidnewAudioENGIneTest::playCallBACk(Ref* pSender)
if (!isplaying) {
log("wav is not playing!");
isplaying=true;
int audioID=play2d("man1.wav");//播放音效文件
log("audioID =%d",audioID);
setFinishCallBACk(audioID,CC_CALLBACK_0(newAudioENGIneTest::changer_playingstatus,0); font-size:11px"> //音效播放完成后修改播放状态,此时会用到audioID
}
else{
log("wav is playing,this click is not response!");
}
}
voidnewAudioENGIneTest::changer_playingstatus(){
@H_675_182@ isplaying=false;log("finished,status has been change");
}
以下是log输出:(可以看出audioID是改变的,即使播放同一个音效)
2015-06-23 15:24:35.303 macstudycocos2dx iOS[17888:662515] cocos2d: surface size: 1024x768
wav is not playing!
audioID =0
finished,status has been change
wav is not playing!
audioID =1
finished,status has been change
wav is not playing!
audioID =2
finished,status has been change
wav is not playing!
audioID =3
finished,status has been change
wav is not playing!
audioID =4
wav is playing,this click is not response! //快速点击时
finished,status has been change
wav is not playing!
audioID =5
wav is playing,this click is not response! //快速点击时
wav is playing,this click is not response! //快速点击时
finished,status has been change
wav is not playing!
audioID =6
wav is playing,this click is not response!
wav is playing,this click is not response!
finished,status has been change
wav is not playing!
audioID =7
wav is playing,status has been change
起初觉得如果音效可以使用AudioENGIne来做,记住要用caf和wav格式。背景音乐可以使用simpleAudioENGIne来播放,毕竟simpleAudioENGIne有缓存机制。
更正下,之所以标红,是今天发现如果同时使用AudioENGIne和simpleAudioENGIne时会导致音效无法播放,具体原因不清楚。看来只能使用AudioENGIne了。
AudioENGIne中没有了playBACkgoudmuisc的方法,背景音乐通过play2d来播放,通过AudioID可以对背景音乐的播放进行控制,用起来也很方便。
而且,今天发现AudioENGIne能播放mp3格式的音乐文件,对于被wav撑得硕大的app来说使用mp3格式无疑是个完美的解决方案,真机的调试效果也是相当满意。
(未完待续)
如果不继承类时可以使用以下方式来播放哦:
int audioID=experimental::AudioENGIne::play2d(wavfileString->getCString());
以上是大佬教程为你收集整理的cocos2dx AudioEngine(声音播放)音效播放结束判断测试和背景音乐播放全部内容,希望文章能够帮你解决cocos2dx AudioEngine(声音播放)音效播放结束判断测试和背景音乐播放所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。