void SkillManager::initBuff() {
CCObject* pobj;
CCLog("in init Buff");
CCARRAY_FOREACH(mSkills, pobj) {
Skill* skill = (Skill*) pobj;
CCLog("skillDuration:%d,skillIndex: %d",skill->mSkillDuration,skill->mSkillDebuffTag);
if (skill->mSkillDuration <= 0) {
mSkills->removeObject(skill);
}
else
skill->initBuffData();
}
}
我创建了一个 CCarray mSkills 来保存我的技能,当技能的持续时间结束时,我将其从数组中删除,每次在检查一个技能的持续时间之前我都会记录它的持续时间和 debuff 标签。我还会在任何时候添加一些技能数组时间。
在大多数情况下,代码运行良好。但偶尔的错误对我来说是一种痴迷。
在正常情况下,日志是:
Cocos2d: init Buff
Cocos2d:skillDuration:6,skillIndex:203
Cocos2d:持续时间:6
Cocos2d: init Buff
Cocos2d:skillDuration:5,skillIndex:203
Cocos2d:skillDuration:2,skillIndex:0
Cocos2d: init Buff
Cocos2d:skillDuration:4,skillIndex:203
Cocos2d:持续时间:4
Cocos2d:skillDuration:1,skillIndex:0
Cocos2d:skillDuration:0,skillIndex:0
在错误日志中是:
ocos2d: init Buff
Cocos2d:skillDuration:1,skillIndex:0
Cocos2d:skillDuration:6,skillIndex:203
Cocos2d:持续时间:6
Cocos2d: init Buff
Cocos2d:skillDuration:0,skillIndex:0
Cocos2d:skillDuration:2,skillIndex:0
Cocos2d:skillDuration:1,skillIndex:0
Cocos2d: init Buff
Cocos2d:skillDuration:5,skillIndex:203
Cocos2d:skillDuration:0,skillIndex:0
Cocos2d:skillDuration:0,skillIndex:0
Cocos2d: init Buff
Cocos2d:skillDuration:4,skillIndex:203
Cocos2d:持续时间:4
Cocos2d:skillDuration:2,skillIndex:0
是指索引为203的技能发生了变化,还是CCArray此时得到了错误的数据?但我可以在下一次 init Buff 中看到 203 的数据是正确的。
我发现使用 CCARRAY_FOREACH 时如果更改数组中的数据会出现一些错误。但是这次我将其更改为 for() {} 问题仍然存在。
有人知道这个问题吗?