如何在delay块中显示当前agent的延迟时间并解决报错
报错原因
agent cannot be resolved to a variable报错是因为文本对象的值编辑器执行上下文里没有预定义agent变量,你传入的agent参数没有对应的实体对象引用,程序无法识别就会抛出该错误。getDelayTime()方法本身需要传入一个当前存在于该Delay块中的Agent类实例作为入参,才能返回对应agent的实际延迟时长。
正确实现方案
根据你要展示的延迟时间对应的场景,选择对应代码即可:
- 场景1:文本对象放在自定义Agent类型的画布中,要显示当前agent自身在sta1Delay块里的延迟时间
直接把入参从agent替换为代表当前agent实例的this即可,代码为:sta1Delay.getDelayTime(this) - 场景2:文本对象放在Main主画布中,sta1Delay块设置为单agent处理模式(同一时间只有1个agent在块内停留),要显示当前正在处理的延迟时间
先从Delay块的队列中取出当前停留的第一个agent,再作为入参传入,代码为:sta1Delay.getDelayTime(sta1Delay.get(0)) - 场景3:要避免Delay块为空时的索引越界报错
增加队列长度判断,块内无agent时显示默认值0,代码为:sta1Delay.size() > 0 ? sta1Delay.getDelayTime(sta1Delay.get(0)) : 0 - 场景4:要显示块内指定agent的延迟时间
先通过你预设的agent标识(比如自定义参数、id属性)定位到目标agent实例,将该实例作为入参传入getDelayTime()方法即可。
注意:传入
getDelayTime()的agent必须是当前正处于sta1Delay块中的实体,否则方法会返回无效值。
内容的提问来源于stack exchange,提问作者Brian Babo
相关产品推荐
相关产品推荐

