在场景中播放sfx for循环:
CocosDenshion::SimpleAudioEngine::sharedEngine()->playEffect("sfx_timesup.mp3", true);
设置一个bt按下播放另一个sfx:
CocosDenshion::SimpleAudioEngine::sharedEngine()->playEffect("sfx_bt.mp3", false);
按bt后31次将停止循环sfx。
#include "HelloWorldScene.h"
#include "SimpleAudioEngine.h"
USING_NS_CC;
CCScene* HelloWorld::scene(){
CCScene *scene = CCScene::create();
HelloWorld *layer = HelloWorld::create();
scene->addChild(layer);
return scene;
}
bool HelloWorld::init(){
if ( !CCLayer::init() ) {
return false;
}
CocosDenshion::SimpleAudioEngine::sharedEngine()->playEffect("sfx_timesup.wav", true);
CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();
CCMenuItemImage *pCloseItem = CCMenuItemImage::create(
"CloseNormal.png",
"CloseSelected.png",
this,
menu_selector(HelloWorld::menuCloseCallback));
pCloseItem->setPosition(ccp(visibleSize.width/2 ,visibleSize.height/2));
pCloseItem->setScale(10);
CCMenu* pMenu = CCMenu::create(pCloseItem, NULL);
pMenu->setPosition(CCPointZero);
this->addChild(pMenu, 1);
return true;
}
void HelloWorld::menuCloseCallback(CCObject* pSender){
CocosDenshion::SimpleAudioEngine::sharedEngine()->playEffect("sfx_bt.wav", false);
}
在cocosdenshion.mm中 这一行:
int sourceIndex = [self _getSourceIndexForSourceGroup:sourceGroupId];
无法识别索引是循环还是播放。
点击bt后31次。它将循环声道并结束循环效果。
答案 0 :(得分:1)
最后,我终于找到了问题并修复了它。
您需要修改CDAudioManager.m文件中的init函数
添加代码:
[soundEngine setSourceGroupNonInterruptible:0 isNonInterruptible:TRUE];
后行:
soundEngine = [[CDSoundEngine alloc] init];
默认cocos2d声音引擎不检查循环或播放sfx。现在它会做到的。为什么我:<发现这么难。因为游戏警告sfx奇怪地停止,然后找到sfx播放问题,然后进入黑洞(声音引擎):<好难过......
答案 1 :(得分:0)
cocos2d-x 3.8中仍然存在此错误,我只是在此运行:)我有更好的解决方法:
在CocosDension.m函数playSound中添加以下代码:
for(int i = 0; i < sourceTotal_; i++){
ALint state;
ALuint source = _sources[i].sourceId;
alGetSourcei(source, AL_SOURCE_STATE, &state);
if (state != AL_PLAYING && state != AL_PAUSED) {
sourceIndex = i;
break;
}
}
之间:
int sourceIndex = [self _getSourceIndexForSourceGroup:sourceGroupId];//This method ensures sourceIndex is valid
和
if (sourceIndex != CD_NO_SOURCE) {