Author:赵志乾
Date:2024-07-19
Declaration:All Right Reserved!!!
1. 问题描述
木板智能体由智能体群进行维护,模型启动时依次创建3个木板智能体,标识分别为S0、S1、S2,z轴坐标分别为0,10,20;现象是2D与3D视图显示不一致,3D视图显示最上层为S2,2D视图显示最上层为S0;
2. 问题分析
2D视图下z轴无法显示,其z-order决定了渲染次序;故上述问题是由各木板智能体在演示视图上的z-order不正确导致的。
z-order不符合预期时的常规解决方案是通过presentation的insert与remove方法调整。但由智能体群维护的智能体放置在ShapeAgentPopulationGroup内进行管理,虽然其继承了ShapeGroup,但相关调整方法实现均为UnsupportedOperationException异常,见下图:
故常规解决方案无法生效,需要新的思路;
3. 解决方案
从内核源码可知,智能体群的演示内容是通过LinkedHashMap进行维护,其顺序完全依赖于添加次序,故更改添加到智能体群的先后次序可间接变更z-order;
过程分为如下3步:
- 额外新建空智能体群;(用于临时保存智能体)
- 将原智能体群内的各智能体通过goToPopulation放入新智能体群;
- 再依据z轴高度从上到依次通过goToPopulation放入原智能体群即可;
更改后的效果图如下: