@ValenW
2016-05-11T07:00:50.000000Z
字数 1256
阅读 2382
Cocos2d-x TA
今天在调试cocos作业的demo的时候出现了一个奇怪的bug。
Win10平台,VS2015,用cocos2d-x C++源码编译。
第一次编译运行很顺利,但之后的运行时总是会出现以下错误:
Assert failed: getFileSize should be override by platform FileUtils
查看调用堆栈,发现是在文件CCFileUtils.cpp中的函数
long FileUtils::getFileSize(const std::string &filepath){CCASSERT(false, "getFileSize should be override by platform FileUtils");return 0;}
导致的assert fail。意思也很简单,getFileSize函数必须根据不同平台来进行不同重载,也就是说,我们要自己写个WinRT平台下的getFileSize函数。(吐槽下cocos开发小组,一个getFileSize函数而已,你们这样真的好么……)
知道错误原因,接下来要做的就是自己动手写个getiFileSize函数咯。
首先在资源管理器里搜索CCFileUtilsWinRT:
定位到CCFileUtilsWinRT.cpp文件内,把下面这段代码插入其中:
long CCFileUtilsWinRT::getFileSize(const std::string &filepath){WIN32_FILE_ATTRIBUTE_DATA fad;if (!GetFileAttributesEx(StringUtf8ToWideChar(filepath).c_str(), GetFileExInfoStandard, &fad)){return 0; // error condition, could call GetLastError to find out more}LARGE_INTEGER size;size.HighPart = fad.nFileSizeHigh;size.LowPart = fad.nFileSizeLow;return (long)size.QuadPart;}
之后再定位到CCFileUtilsWinRT.h文件内,增加函数声明:
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