moveTo 在“任务暂停时”不起作用

问题描述

我有一个码头作为静态资源,我想在有更高优先级的船只到达时将码头中的当前船只移动到等候区(码头一次只能停靠一艘船。船只是其中的代理流程图)。为了做到这一点,我允许抢占块(抓住码头的那个)和它的“任务暂停”框我写了代码

agent.moveto(waitingArea);

当优先级更高的船到达并暂停当前船的任务时,当前船保持在码头没有移动,新船到达码头(在当前船的顶部),并且只有在几秒(模型中的小时数),当前船跳到waitingArea,就像代码是jumpTo 而不是moveto

不仅动画中没有显示运动(只是跳跃),而且运动(跳跃)的执行有一个额外的延迟,而且在模型运行的后期我收到错误“无法设置到达移动时回调”。

如果我从“任务暂停”框中删除上面描述的代码错误不会出现,但当然船的动画会重叠,就像码头中有两艘船一样,一艘在船的顶部其他,这就是我不想发生的事情。

知道发生了什么以及如何解决吗?

More detail of my model just in case

解决方法

尽量不要在抢占部分编写代码。

相反,继续执行抢占端口外的流程图并使用 MoveTo 块执行您需要的操作: enter image description here

始终确保您了解模块的所有端口,以便在需要时使用它们。

Seize-block 帮助是 here

,

我解决了以下所有问题:

为了让动画发生而不是跳跃,我必须删除延迟块位置属性并将其留空。显然,moveTo 代码不会覆盖在块属性中输入的位置,但 moveTo 代码的目的地会覆盖(在我看来是不直观的行为)。

跳跃发生前的奇怪延迟是飞船进行“隐形”运动的时间,所以当飞船“到达”等候区时,跳跃是由动画执行的。有了上面这点就明白了,解决了。

最后,由于船舶从等候区返回码头时,延迟时间结束,下一个块是一个moveTo块,所以船同时收到了两个moveTo指令(一个从“当任务恢复时”和延迟后的 moveTo 块中的一个)。为了解决这个问题,我必须输入一个代码来暂停延迟倒计时,直到船再次停靠在码头上,然后再继续。