1

我对 Netlogo 很陌生,我目前正在用 Hubnet 编写一个严肃的游戏。我想知道是否可以通过弹出窗口向特定客户端发送消息。我解释:例如,如果客户做出某个决定(或行动),他会通过弹出窗口的消息提醒他其潜在后果。在其他情况下,我希望弹出窗口是“是或否”或多选(带有弹出菜单)问题,在这种情况下,我想将客户的答案存储在特定变量中(全局或乌龟变量)。

我知道可以将弹出窗口消息发送到用户界面,例如:

user-one-of "value" [list-of-choices]

user-message "value"

user-yes-or-no? "value"

我真的不知道如何为客户端的界面执行此操作,但是我怀疑这是可能的,因为在某些情况下,客户端可能会在操作后收到弹出消息。例如,当客户端在输入框中输入错误的输入类型(例如字符而不是数字)时,会弹出如下错误消息:

客户端界面中的错误消息弹出

我想自己在代码中编写这种消息,以便在某些客户端的操作之后弹出这样的消息(例如当不恰当地单击按钮时)。

希望有人可以帮助我解决这个问题!

谢谢!!

克莱门特

4

1 回答 1

2

对于你的问题,我将给出三个答案。第一个,从字面上理解你的问题,是“不”。HubNet 客户端上的主机无法触发弹出窗口。

第二个是在某些非常有限的情况下“是”。您展示的示例表明您可能在 HubNet 客户端上有一个输入框,客户端用户将使用该输入框将值发送到主机,并且您希望将其设为 NUMERIC 值。如果在创建 HubNet 客户端界面时,您专门选择“数字”作为输入的子类型,则键入非数字条目的用户将收到一个弹出框,告诉他们他们的输入无效。

第三个答案是一种“是”,其中一种可能是您可以接受的“解决方法”。

对于这些方法中的每一种,我将指定将在主机上运行的 NetLogo 代码。此代码通常会放置在您从客户那里收到令人反感的输入的模型部分中。按照模型库中 HubNet 示例的格式,这将在一个名为“listen-clients”的过程中。我还假设有一种海龟(我称它们为“学生”),它们使用海龟变量(我称之为“用户 ID”)映射到 HubNet 客户端。此用户 ID 最初将作为 hubnet-enter-message(以及来自该 HubNet 客户端的所有后续消息)的 hubnet-message-source 获得。

所以,我看到的用于你提到的情况的选项(据我了解)是......

解决方法 A,以多种方式之一向客户端发送消息。

1)发送“聊天”消息[可能不可接受]

hubnet-send-message user-id "[your message goes here]"

这将在用户的聊天窗口中显示一条消息。我认为这对您来说是不可接受的,因为它是可以忽略的,并且因为它不能识别导致问题的界面部分。

2) 发送一条消息,覆盖他们输入了令人反感的输入的输入框。假设客户端输入框的名称是“entry” 那么,如果用户在输入框中输入“-8”,并且数字必须是正数,可以使用如下代码:

hubnet-send user-id "entry" "MUST BE POSITIVE"

将导致输入框(令人吃惊地)填充该文本。(注意:即使输入框被声明为纯数字类型也有效)

3) 使用 hubnet-view-overrides 使消息或条件出现在 VIEW 中。根据您希望客户体验的震撼程度,您可以操纵他们的个性化视图。(这适用于使用 View Mirroring 的 HubNet 模型)。

例如,要使 5 10 处的补丁显示一条消息“INVALID”,您可以说:

hubnet-send-override user-id (patch 5 10) "plabel" [ "INVALID" ]

或者您可以通过将所有补丁变为红色(以及 INVALID 消息)使其更加疯狂

hubnet-send-override user-id patches "pcolor" [ red ] 

然后,当用户解决问题时,您可以删除所有视图覆盖

hubnet-clear-overrides user-id

选项 3 更“高级”--> 我建议在此处查阅用户指南,因为语法可能会令人困惑。但它在吸引用户注意力方面非常有效:)

希望有帮助

于 2014-03-14T18:55:01.297 回答