【求助】关于修改部分引擎代码之后编译android的问题

小弟初学cocos2dx两天~ 最近打算开发一个android程序,其中需要一个媒体播放器的功能

我下的是最新版的cocos2d-x 3.0beta2

简单研究了一下引擎的音频部分SimpleAudioEngine之后发现里面是用mci来实现的

于是打开代码看了一下,里面只实现了播放、暂停、回放等最基本的方法

但我这边需要 【get、set目前播放进度】【get歌曲总长度】这几个方法,小弟正好略懂一点mci编程就把这几个方法加了进去
(修改了引擎原有的MciPlayer和SimpleAudioEngine)

在windows下编译运行,没有问题!一切OK!

但尝试在proj.android下编译的时候出了问题 = = 我写的那几个方法貌似它不认

./obj/local/armeabi/libcocosdenshion.a(cddSimpleAudioEngine.o):cddSimpleAudioEng
ine.cpp:function vtable for CocosDenshion::SimpleAudioEngine: error: undefined r
eference to ‘CocosDenshion::SimpleAudioEngine::setBackgroundMusicPosition(int)’

./obj/local/armeabi/libcocosdenshion.a(cddSimpleAudioEngine.o):cddSimpleAudioEng
ine.cpp:function vtable for CocosDenshion::SimpleAudioEngine: error: undefined r
eference to ‘CocosDenshion::SimpleAudioEngine::getBackgroundMusicPosition()’

./obj/local/armeabi/libcocosdenshion.a(cddSimpleAudioEngine.o):cddSimpleAudioEng
ine.cpp:function vtable for CocosDenshion::SimpleAudioEngine: error: undefined r
eference to ‘CocosDenshion::SimpleAudioEngine::getBackgroundMusicLength()’

我个人的猜测是因为SimpleAudioEngine在各个平台上底层的实现不一样,我仅仅改了win32的底层实现,所以这样不行

请问是这样吗?另外应该怎么解决呢?非常感谢!

问题已经解决了

我找到了cocos2dx android底层音频实现的机制


不过还有一个新问题请问一下,cocos2dx引擎里底层的音频是用Android的MediaPlayer类(JAVA)实现的,这个类封装的功能还是不够强大

我想实现加速/减速播放的功能,但好像MediaPlayer类无法实现?

你好,我也是修改了底层的代码,win32编译没问题,是在底层增加了一个类文件,在android底层编译的时候错误也是找不到相关的定义
ld.exe: ./obj/local/armeabi/libcocos2d.a(CCFileUtils.o): in function cocos2d::CCFileUtils::getFileData(char const*, char const*, unsigned long*):D:/cocos2dx2v2/cocos2d-x-2.2/projects/fileReadTest/proj.android/…/…/…/cocos2dx/platform/CCFileUtils.cpp:492: error: undefined reference to ‘cocos2d::ProjectFileManager::sharedFileManager()’
E:/android-ndk-r9-windows-x86_64/android-ndk-r9/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/…/lib/gcc/arm-linux-androideabi/4.6/…/…/…/…/arm-linux-androideabi/bin/ld.exe: ./obj/local/armeabi/libcocos2d.a(CCFileUtils.o): in fu

按照你的做法,android底层的也是另外一套机制,加上宏定义区分,然后在单独修改android底层的实现机制就可以了吧?