处理控制远程机器人的应用程序,在该应用程序中,按下按钮与实际发生的操作之间可能存在显着延迟。此外,由于网络不可靠等原因,命令有可能无法成功到达目标接收者。此外,还有一些变量在发挥作用,其变化不是即时的。例如,指令速度和当前速度都有一个变量;更改指令速度不会立即使当前速度与该值匹配。
问题是,如何使应用程序反映远程机器人报告的当前状态,以及向用户确认应用程序已理解其命令,但系统尚未收到来自已被承认的机器人? (弹出窗口是绝对禁止的。)
已经讨论过的一些想法:
按下命令按钮时,启动计时器一段合理的秒数,并在此期间禁用该按钮。不要直接更新相应的标签,而是等待机器人的响应。 (例如,如果您按下Speed +按钮,而右侧是显示当前速度的文本标签,请不要立即更改标签,而是等待机器人的响应)。一旦发生此响应,或计时器到期,请重新启用该按钮。
优点:页面上不需要额外的控件小部件。标签始终反映机器人的当前状态。
缺点:如果您想连续发送两个速度更新,则必须等到第一次收到并确认。会感到迟钝和反应迟钝。
拥有一个用户可以查看的日志,该日志显示用户已采取的所有操作的文本表示,已加上时间戳,并且历史记录清晰可见。可以根据用户偏好进行颜色编码。
优点:用户立即反馈他的命令被理解,因为它出现在日志中
缺点:不解决如何处理按钮(尤其是单选按钮)行为的问题。
是否有人有为构建操作和响应之间存在显着延迟的环境构建UI的经验?我会很感激所有的投入。
答案 0 :(得分:4)
我不会去记录日志:你的主要关注点是小部件。有几种报告不同组件状态的技术,我将在这里讨论一个简单的方法:
按钮旁边有一个状态图标,显示其状态。使用不同的颜色表示延迟。绿色表示“就绪”,当用户单击按钮时,图标变为“橙色”,表示忙碌。当用户再次单击时,颜色变为“红色”,这意味着排队。当队列为空时,颜色会变回橙色。如果执行了该操作,则颜色将更改为绿色。
滑块可用于浮动值:使用两个“滑块”。第一个是更好的可见,可以拖动。第二个和第一个下面的一个层是“实际报告的值”,它显示了延迟。
文字输入也可以使用绿色/橙色状态图标。编辑时,颜色变为橙色。如果您的队列/网络协议支持取消编辑操作,则可以在每次用户按下某个键时重新发送新字符串。如果不是:更改时将图标更改为橙色,发送字符串,然后等待状态报告。状态报告应包含实际值,如果此实际值等于组件中的值,则将图标更改为绿色。如果实际值不等于组件中的值,则重新发送组件中的值。
Radiobuttons / Checkboxes应该有双显示屏。一个可编辑,一个不可编辑。第一个是用户输入,第二个是实际报告状态。与滑块组件的行为相同。
这些需要自定义组件或小部件。您可以扩展原始组件或从头开始重新创建它们。
如果您的机器人也可以“转向”:
创建一个可以拖动的矩形。矩形上绘有一个小十字,当前值。拖动时,您会看到十字架的延迟。您可以使用插值和时间值来平滑机器人控制。用户会注意到滞后,因为十字“跟随”他的鼠标指针。 (通常在控制虚拟舰船时用于太空射击模拟游戏,例如 Allegiance )
答案 1 :(得分:3)
答案 2 :(得分:1)
也许您可以使用命令模式的变体。用户的每个动作都会生成一个命令,该命令进入队列。在屏幕上的打印输出中,用户可以看到该队列。因此,您不要禁用该按钮,但允许用户多次按下该按钮,但会向用户显示该命令已排队。同时,在从机器人接收状态之前,不要更新显示机器人当前状态的标签。
在队列中,命令可以某种方式显示其状态,可能是文本和颜色。也许您应该允许用户在机器人处理之前删除命令(如果可能的话)。
因此队列可能如下所示:
Command Status Result of Action speed+5 pending speed will increase to 200 (Delete This) speed+5 pending speed will increase to 205 (Delete This) speed-5 pending speed will decrease to 200 (Delete This)
等等。
答案 3 :(得分:0)
我不认为应该首先选择禁用响应功能。互联网上的所有内容都应具有正确的响应能力,并且始终应始终遵守法规,没有例外,我们应始终通过GDPR和法规遵从。并且命令不应该是更改的选项。它们都应放置在适当的位置并固定好,而不是某人进行更改的选择。它应该正确且安全。