我是Netlogo的新手,我目前正在与Hubnet编写一个严肃的游戏。我想知道是否可以通过弹出窗口向特定客户端发送消息。我解释: 例如,如果客户做出某个决定(或行动),则通过弹出窗口通过消息向他通知其潜在后果。在其他情况下,我希望弹出窗口是“是或否”或多选(带弹出菜单)问题,在这种情况下,我想将客户端的答案存储在特定变量(全局或乌龟变量。)
我知道可以将弹出窗口消息发送到用户的界面,例如:
user-one-of "value" [list-of-choices]
user-message "value"
user-yes-or-no? "value"
我真的无法弄清楚如何为客户端界面做这件事,但我怀疑这是可能的,因为在某些情况下,客户端可能会在操作后收到弹出消息。例如,当客户端将错误的输入类型输入到输入框(例如字符而不是数字)时,会弹出如下错误消息:
我想在代码中自己编写这种消息,以便在客户端的某些操作之后弹出这样的消息(例如,当不恰当地点击按钮时)。
希望有人可以帮我这个!
谢谢!
Clément
答案 0 :(得分:2)
我将给你的问题三个答案。首先,从字面上看你的问题是“不”。无法从HubNet客户端上的主机触发弹出窗口。
在某些非常有限的情况下,第二个是“是”。您显示的示例表明您可能在HubNet客户端上有一个输入框,客户端用户将使用该输入框将值发送到主机,并且您希望将其作为NUMERIC值。如果在创建HubNet客户端界面时,您专门选择“数字”作为输入的子类型,则键入非数字条目的用户将获得一个弹出框,告诉他们输入无效。
第三个答案是一种“是”,其中一种可能是您可以接受的“解决方法”。
对于这些方法中的每一种,我将指定将在主机上运行的NetLogo代码。此代码通常放在模型中您收到来自客户端的令人反感的输入的部分。遵循模型库中HubNet示例的格式,这将是一个名为“listen-clients”的过程。我还假设有一种海龟(我称之为“学生”),他们使用乌龟变量映射到HubNet客户端(我称之为“用户ID”)。此用户标识最初将作为hubnet-enter-message的hubnet-message-source(以及来自该HubNet客户端的所有后续消息)获取。
所以,我所看到的用于你提到的情况的选项(据我所知)是......
解决方法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更“先进” - >我建议在这里查阅用户指南,因为语法可能会令人困惑。但它在吸引用户注意力方面非常有效:)
希望有所帮助