切记循环内修改判断条件要谨慎

 bug现象:我更改了场景更新时间,将原来一个场景的更新时间改成了3种不同类型分别不同的更新时间,然后场景里面的怪物就不运动了。    
    原代码:
time_t diff = curTick - lastUpdateTick_;
//std::cout<<" diff:"<<diff<<std::endl;


if (diff > 500)
diff = 500;


lastUpdateTick_ = curTick;
for (ScenarioMap::const_iterator it = scenarioMap_.begin(); it != scenarioMap_.end(); it++)
{
it->second->update(diff);
}
 
修改后代码:
for (ScenarioMap::const_iterator it = scenarioMap_.begin(); it != scenarioMap_.end(); it++)
{
Scenario* scene  = it->second;  
if(scene->isTown())  
{  
time_t diff = curTick - townLastUpdateTick_; 
if(diff > townUpdateDiff)  
{  
scene->update(diff);  
townLastUpdateTick_ = curTick; 

}

if(scene->isField())  
{  
time_t diff = curTick - fieldLastUpdateTick_; 
if(diff > fieldUpdateDiff)  
{  
scene->update(diff);  
fieldLastUpdateTick_ = curTick; 

}
}

原因引起:

如果场景更新成功后,修改了判断条件的一个变量townLastUpdateTick_(或ieldLastUpdateTick_ ),会导致循环后面的本来成功的判断都会失败。 

      谨记这种因为错误的更改了 循环内的判断条件的值 引起的bug。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值