[关闭]
@ValenW 2016-05-11T07:00:50.000000Z 字数 1256 阅读 2078

Cocos2d-x Win10 平台 缓存音乐bug

Assert failed: getFileSize should be override by platform FileUtils

Cocos2d-x TA


今天在调试cocos作业的demo的时候出现了一个奇怪的bug。
Win10平台,VS2015,用cocos2d-x C++源码编译。
第一次编译运行很顺利,但之后的运行时总是会出现以下错误:

  1. Assert failed: getFileSize should be override by platform FileUtils

查看调用堆栈,发现是在文件CCFileUtils.cpp中的函数

  1. long FileUtils::getFileSize(const std::string &filepath)
  2. {
  3. CCASSERT(false, "getFileSize should be override by platform FileUtils");
  4. return 0;
  5. }

导致的assert fail。意思也很简单,getFileSize函数必须根据不同平台来进行不同重载,也就是说,我们要自己写个WinRT平台下的getFileSize函数。(吐槽下cocos开发小组,一个getFileSize函数而已,你们这样真的好么……)

解决方案

知道错误原因,接下来要做的就是自己动手写个getiFileSize函数咯。
首先在资源管理器里搜索CCFileUtilsWinRT
资源管理器搜索
定位到CCFileUtilsWinRT.cpp文件内,把下面这段代码插入其中:

  1. long CCFileUtilsWinRT::getFileSize(const std::string &filepath)
  2. {
  3. WIN32_FILE_ATTRIBUTE_DATA fad;
  4. if (!GetFileAttributesEx(StringUtf8ToWideChar(filepath).c_str(), GetFileExInfoStandard, &fad))
  5. {
  6. return 0; // error condition, could call GetLastError to find out more
  7. }
  8. LARGE_INTEGER size;
  9. size.HighPart = fad.nFileSizeHigh;
  10. size.LowPart = fad.nFileSizeLow;
  11. return (long)size.QuadPart;
  12. }

之后再定位到CCFileUtilsWinRT.h文件内,增加函数声明:

  1. virtual long getFileSize(const std::string &filepath);

然后重新生成,问题就解决了~

参考

c++11 - Cocos2d background sound not playing a second time - Stack Overflow
Assert attempting to play background music for 2nd time (win8.1-universal project) · Issue #14737 · cocos2d/cocos2d-x

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注