在Cocos2d-x(3.6)中我试图为SimpleAudioEngine添加增强的功能。具体来说,关于Android的SoundPool(SimpleAudioEngine基于Android,至少对于Android),我试图添加一些尚未实现但在Android Developer网站上记录的方法。
例如,SoundPool的play方法包含一个int类型的循环变量,而在SimpleAudioEngine中它的类型为bool(Java端的boolean)。如果我可以用循环变量实现一个新方法作为int类型,我将能够在调用playEffect方法时直接控制重复次数。
我已经找到了大部分所需的更改,包括各种C ++标头和.cpp文件(cocos / audio / include / SimpleAudioEngine.h,cocos / audio / android / cddSimpleAudioEngine.cpp,cocos / audio / android / jni / cddandroidAndroidJavaEngine.h,和cocos / audio / android / jni / cddandroidAndroidJavaEngine.cpp)以及Cocos2dxSound.java文件,但我仍然收到错误消息,说我的新方法(我称之为playEffectN)无法找到。
我可以看到可能需要添加某些内容的唯一其他位置是cocos / audio / openal / SimpleAudioEngineOpenAL.cpp文件,但我不太确定如何修改它以添加我的新方法。
为了将这些额外的功能添加到SimpleAudioEngine,有人能指出我还需要做些什么吗?如果我成功,我将很乐意分享结果。 (如果成功,我还可以在SoundPool中添加一些其他未实现的方法,例如setLoop,setPriority,setRate和setVolume,用于已经分配了soundID的声音。)
答案 0 :(得分:0)
首先,在:
中添加c ++ apiscocos/audio/include/AudioEngine.h
虽然cddSimpleAudioEngine.cpp中没有实现,但仍需要在AudioEngine.h中声明函数
然后,c ++和java之间的桥梁:
cocos/audio/android/jni/cddandroidAndroidJavaEngine.h
cocos/audio/android/jni/cddandroidAndroidJavaEngine.cpp
这里,在cddandroidAndroidJavaEngine.h中声明并在cddandroidAndroidJavaEngine.cpp中实现,如
void AndroidJavaEngine::playEffectN(int times) {
cocos2d::JniMethodInfo methodInfo;
if (! getJNIStaticMethodInfo(methodInfo, "playEffectN", "(I)V")) {
return ;
}
methodInfo.env->CallStaticVoidMethod(methodInfo.classID, methodInfo.methodID, times);
methodInfo.env->DeleteLocalRef(methodInfo.classID);
}
然后在java
cocos/platform/android/java/src/org/cocos2dx/lib/Cocos2dxHelper.java
添加如下功能:
public static void playEffectN(int times) {
}
最后是你的java工具,在
中cocos/platform/android/java/src/org/cocos2dx/lib/Cocos2dxMusic.java