第一个:异步加载。
addDataFromZipFileAsync 这个函数。判断是否缓存有这个文件,有就返回了,思路是对的,判断条件,令人堪忧啊。
for(unsigned int i = 0; i < s_arrConfigFileList.size(); i++)
{
if (s_arrConfigFileList*.compare(filePath) == 0)
{
if (target && selector)
{
std::string fullpath = filePath;
int index = fullpath.find_last_of(".");
std::string temp_path = fullpath.substr(0,index);
CCArmatureDataManager* manager = CCArmatureDataManager::sharedArmatureDataManager();
CCArmatureData* data = (CCArmatureData*)(manager->getArmatureData(temp_path.c_str()));
if (data)
{
if (s_nAsyncRefTotalCount == 0 && s_nAsyncRefCount == 0)
{
(target->*selector)(1);
}
else
{
(target->*selector)((s_nAsyncRefTotalCount - s_nAsyncRefCount) / (float)s_nAsyncRefTotalCount);
}
return;
}
}
//
}
}
```
我稍许修改了下,判断data加载好了,才会 return。
第二个bug,(这个比较长)
void CCArmatureAnimation::playWithArray(AnimationListToBinding* array)
```
我想用这个函数,看起来 还不错的样子,上面的 我已经修改了。
原来的 大概是
CCArray *movementNames, int durationTo, bool loop
```
这样的。
发现了没。 保存队列名字很好,后面的怎么就不队列了呢?
我稍加修改了,变成队列了。后面有个update
void CCArmatureAnimation::updateMovementList()
{
if (m_bOnMovementList)
{
if (m_bMovementListLoop)
{
play(m_sMovementList.at(m_uMovementIndex).c_str(), m_iMovementListDurationTo, -1, 0);
m_uMovementIndex++;
if (m_uMovementIndex >= m_sMovementList.size())
{
m_uMovementIndex = 0;
}
}
else
{
if (m_uMovementIndex < m_sMovementList.size())
{
play(m_sMovementList.at(m_uMovementIndex).c_str(), m_iMovementListDurationTo, -1, 0);
m_uMovementIndex++;
}
else
{
m_bOnMovementList = false;
}
}
m_bOnMovementList = true;
}
}
```
play 后面的loop 俩都是-1.
错误的重点 就这俩。*