"On task suspended" 上的 moveTo 不起作用

moveTo on "On task suspended" doesn't work

我有一个码头作为静态资源,当有更高优先级的船只到达时,我想将码头中的当前船只移动到等待区(码头一次只能处理一艘船。船只是流程图中的代理)。为此,我允许在占用块(占用码头的块)中进行抢占,并在其“任务暂停”框中编写了代码:

agent.moveTo(waitingArea);

当更高优先级的船到达并暂停当前船的任务时,当前船保持在码头不动,新船到达码头(在当前船的顶部),并且只有在几秒钟(在模型中为几小时),当前飞船跳转到 waitingArea,就像代码是 jumpTo 而不是 moveTo 一样。

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

如果我从“On task suspended”框中删除上述代码,则不会出现错误,但是当然船的动画会重叠,就像码头上有两艘船一样另一个,那是我不想发生的事情。

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

抢占部分尽量不要写代码

相反,从抢占端口继续流程图并使用 MoveTo 块来执行您需要的操作:

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

Seize-block 帮助是 here

我解决了以下所有问题:

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

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

最后报错是因为船从等待区返回码头时,延迟时间结束,下一个block是moveTo block,所以船同时收到了两条moveTo指令(一个来自“当任务恢复时”,一个来自延迟后的 moveTo 块)。为了解决这个问题,我不得不输入一个代码来暂停延迟倒计时,直到船再次进入码头,然后再恢复。