切记循环内修改判断条件要谨慎
来源:互联网 发布:java调用jsp页面 编辑:程序博客网 时间:2024/06/18 12:01
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;
}
}
}
原因引起:
原代码:
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。
- 切记循环内修改判断条件要谨慎
- 条件判断和循环
- Python:循环、条件判断
- DB---条件判断、循环
- 条件判断和循环
- 条件判断、循环
- 条件判断和循环
- python条件判断、循环
- 条件判断和循环
- ansible 条件判断+循环
- Python_条件判断和循环
- python10:条件判断和循环
- shell循环和条件判断
- 3.条件判断和循环
- PowerShell 条件判断和循环
- python 条件判断和循环
- python 条件判断与循环
- Python(条件判断和循环)
- 逐渐精通Makefile
- ALSA移植到6410
- postgresql触发器
- 循环移位的宏实现
- CSS纯色半透明 支持IE6/IE7/IE8 FF CHROME OPERA SAFARI
- 切记循环内修改判断条件要谨慎
- SecureCRT下的串口不能输入
- javaSE编程入门
- google 提供的地图
- easyui-ssh后台管理效果图
- Ubuntu下Virtualbox使用体验-虚拟XP
- 在Lua的pcall内部崩溃
- android LinearLayout布局
- JS中Null与Undefined的区别