gpt4 book ai didi

java - 为 Cocos2d-x SimpleAudioEngine 添加新方法

转载 作者:太空宇宙 更新时间:2023-11-04 13:32:57 26 4
gpt4 key购买 nike

在 Cocos2d-x (3.6) 中,我正在尝试向 SimpleAudioEngine 添加更多功能。具体来说,关于 Android 的 SoundPool(SimpleAudioEngine 所基于的,至少对于 Android 而言),我正在尝试添加一些尚未实现但记录在 Android 开发者网站中的方法。

例如,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 的声音。)

最佳答案

首先,添加c++ api,在:

cocos/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

关于java - 为 Cocos2d-x SimpleAudioEngine 添加新方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30767998/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com