目前重构过程工作目录:
0.00-original
0.00(2)-original.fps
0.02-move.render.renderUnits.to.world.renderUnits
0.04-harvest
0.06-FirstAttackCommand
0.08-2ccRepair.hasCommonType
0.08-最后一个caommandTypes.但改了之后会crash.所以未改
0.10-computeFirstCtOfClass
0.12-替换全部的commandTypesMap
0.14-替换AiRuleBuildOneFarm中的test中的getCommandType函数
0.16-替换gui中的getCommandType函数
0.18-删去了UnitType中的commandType
0.20-fps
0.22-修改CommandType和UnitUpdater的关系.XXXUnitUpdater的变量未初始化
0.24-修改CommandType和UnitUpdater的关系.通过全局变量game修正bug
0.26-XXXUnitUpdater初始化放进UnitUpdater
0.28-UnitUpdater中的updateUnit转入World
0.30-重构ParthFinder为Singleton
UnitUpdater
图1 class unitUpdater
void XXXCommandType::update(…)
{
unitUpdater->updateXXX( unit );
}
XXX代表Build、Move、Stop
图2 UnitUpdater-CommandType
void XXXCommandType::update()
{
unitUpdater->update();
}
进而,将XXXCommandType::update()上升为CommandType::update()
void CommandType::update()
{
unitUpdater->update();
}
这样就可以把CommandType中对unitUpdater::updateXXX()的调用统一起来。
CommandType和SkillType
CommandType和SkillType都是行为。但SkillType是baseic action;而CommandType是complex action, composed by skills。下面是类关系图。
图3 CommandType-SkillType
signleton模式
把ParthFinder转为为Singleton。
发现singleton模式可以让代码写得很优雅――免去了函数调用过程中传递ParthFinder参数,仅仅将ParthFinder头文件包含进来就可以了。
FPS
在屏幕上显示fps,如果每一帧都显示fps=1/Δt时,会发现显示的数字抖动很厉害,更本看不清是多少。
现在用“取均值”的方法解决了这个问题。显示连续5帧的平均的fps。
图4 FPS:29.1(图左上角)
RainParticleSystem
对RainParticleSystem的改动,原因如下:
游戏登陆画面出现时,背景中雨滴从天而降,但最下面的雨滴形成了一个明显的面,看起来很不舒服。
图5 背景中的雨滴形成了一个“面”
RainParticleSystem初始化时,将partical的y坐标修改为区域随机值。画面有了较好的改善。
图6 随机化y坐标后的rain
但rain的效果没有最初的好。一个比较好的方法应该是,登陆时rain partical不是从time =0时刻开始生成,比如说从time=10.0开始生成。此时玩家登陆时看到的雨滴已经到达地面,不会在出现那个“面”了。