一.问题分析
花园偶现一些奇怪的Npc出现在场景中,如下图:
但是由于没有复现的办法,也尝试修改,但是还是会偶尔出现上述问题;
通过不断地发现,大致发现以下两个规律:
1.大概率出现在切换区域后的瞬间
2.奇怪npc出现的位置与花园第一区域的大马路的坐标范围;
二.人物动作队列管理
根据以上发现出现规律以及之前看了部分代码逻辑整合;
1.加载
方法GardenPersons::LoadPerses加载所有花园角色配置,游戏通过DataXmlPaths来收集各类资源,而角色资源的类型为DataXmlPaths::Type::GardenPersons在\base1\GardenPersons.xml
方法CreateObjectByType用来根据角色type来分别构造不同的角色类对象
https://idreamsky.feishu.cn/wiki/wikcnWKnAXGHOlgvZJpyZqSbgff
2.人物的active
class GardenPersons final
{
private:
std::map<std::string, PeopleParentPtr> _peoples;
std::set<std::string> _active; //管理所有人物的active
void ActivatePers(const std::string& name, bool value)
https://idreamsky.feishu.cn/docs/doccna7dDhHK8YLiNsLNxuavpag#
1.以mary这个NPC为例进行验证:
切换区域时:
切换区域时是把所有人物都reset,不存在没set的情况;
现在知道为什么mary是active了
于是,调整边界,重启客户端出现了,
还是没有复现问题;
当mary的坐标在门口时,切换到故宫区域postsion:
切换区域时,如果有mary的故宫区域的坐标则把坐标重置,否则保持不变.
3.关于_actionsQueue处理
并且,会把默认的P_Stay动作设置为_curAnimAlias,后面还有StartNextAnimation(_curAnimId, _curAnimReverse);
1._actionsQueue定义
2._actionsQueue的方法
RunAction();
action->SetWorking(true)
//ActionType::None:
fastFinishAction = true;
//fastFinishAction==true,对于一帧完成的直接调用
FinishCurAction(true)