@ValenW
2016-05-11T15:00:50.000000Z
字数 1256
阅读 2169
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