显示参与者的光标: 多用户演示
概述
在一个多用户实验中,当多个参与者实时参与实验时,您可能希望让他们的光标彼此可见。在此演示中,我们将向您展示如何设置这一点。

实施说明
请注意,您可以在Labvanced中实现共享多个参与者的光标位置的几种方法,因为该平台具有灵活性,因此在选择方法之前,考虑您的实验设计非常重要。
为了说明这一点,我们将提出两种实现方法:
方法1: 使用鼠标跟踪和数组显示光标
此演示包含两个对象(每个用户一个鼠标),并在对象面板的侧边面板中列出。此方法可用于参与者超过2人的多用户研究。
对象
以下是Object Properties面板,在此可以处理所有视觉样式。目前,两个光标的 Visibility 值均为1(这意味着不透明度=100%),如下所示:

对于此演示,我们将Visibility更改为0,如下所示。稍后,当实验开始时,我们将使其中一个光标可见。即如果您是参与者1,那么您将看到参与者2的光标对象,反之亦然。这在下面的事件:Init部分中进行了描述。

如果您不想为光标有两个对象,请参阅本节以查看仅使用单个光标对象的替代方法。
自定义变量
在此,我们列出为此演示创建的所有自定义变量。您可以预先创建它们或在构建实验时在编辑器中创建它们。

事件概述
要添加事件,请单击[+] Frame Event (on this frame only)。
在此演示中,我们有以下事件:
- 事件:Init: 使其他参与者的鼠标可见
- 事件: sendMove: 发送鼠标坐标
- 事件: receiveMove: 接收鼠标坐标
下面描述了每个事件的结构。
事件: init
此事件指定当帧初始化时会发生什么。在这种情况下,我们的目标是参与者1看到参与者2的鼠标,反之亦然。
触发
此事件的触发器是On Frame Init,因为我们希望在帧初始化时立即分配光标对象的可见性。

动作
在指定此内容并单击“下一步”按钮后,您可以选择在帧初始化时发生的动作。
下面,我们展示的动作是 控制动作 → ‘如果...则’,,因此:
- 如果
Role_Id等于1(注意:Role_Id 是一个唯一于多用户研究的变量,分配给参与者其ID)。 - 那么,将
Set Object Property的mouse_user_2对象的Visibility设为1。 - 注意: 这两个动作的组合本质上意味着:“如果您是参与者1(Role_Id==1),那么您将看到 mouse_user_2 对象。”
- 注意:
Role_Id == 1如何在编辑器中指定?请参阅下面的 逐步说明部分,其中对此进行了更详细的解释。

在Else If部分,我们对参与者2 (Role_Id==2) 做相同的事情。目标对象是mouse_user_1,其 Visibility值应为1。

事件: sendMove
接下来,我们必须在两个参与者之间建立一个“桥梁”,如果您移动鼠标,这些值将被跟踪/存储并发送给另一位参与者。
触发
因此,使用Mouse trigger作为此事件的触发器,任何进行的“移动”都会触发该事件。

动作
同样,需要一个 Control Action → If…Then 命令:


如果您的 Role_Id==1,则以下 Variable Actions 将发生:
Set / Record a Variable: 点/定义变量moveMouse1并将其等于触发器特定值Mouse [X,Y] Array。Distribute Variable:将此变量分享给参与者2。
否则,如果您的Role_Id==2 …

那么:
moveMouse2将记录鼠标 [X,Y] 数组(就像上述示例一样),但我们将用它来存储参与者2的鼠标跟踪值,并将其等于他们的鼠标 [X,Y] 数组。- 然后,将此变量分发给参与者1。

总结- 到目前为止,我们已经:
- 创建了变量以存储每个参与者的鼠标跟踪 [X,Y] 数组(参与者1的光标为moveMouse1,参与者2的光标为moveMouse2)
- 并建立了一座桥梁,通过分配变量操作将鼠标跟踪值发送给另一位参与者。
EVENT: receiveMove
接下来,我们需要指定这些鼠标追踪值将发生什么。在这种情况下,当以数组格式接收到鼠标移动时,我们希望更改鼠标光标对象以反映这些移动!换句话说,使用 [X,Y] 数组,我们将这些值绑定到鼠标光标上,使其实际上移动,显示其他参与者在屏幕上所做的事情!因此,为了实现这一点,将使用下面描述的触发器和动作。
Trigger
由于鼠标追踪值被存储在变量中,因此每当这些变量发生变化时,意味着鼠标在移动。因此,我们可以使用 Variable Value Changed trigger 通过选择两个特定的变量,这两个变量保存了鼠标追踪值,从而在屏幕上更新光标位置,如下所示:

Action
接下来,我们想要使用 Select From Array (Read) action 来从光标的变量数组中获取 x 和 y 坐标值,因为我们计划使用它们来设置对象的坐标。
因此,我们选择 moveMouse1 变量,该变量具有参与者 1 的 [X,Y] 数组,并调用第一个值,该值为 Fixed Index 的 1,并将该值存储在一个名为 x_mouse1 的数字变量中,因为 x 值在数组中列为第一。

我们添加另一个 Select From Array (Read) 动作,并将 Fixed Index 写为 2,因为我们想调用第二个数组值,即 y 坐标,并将其存储在 y_mouse1 变量中。
为了使光标图像实时移动,我们需要更新其图像坐标,使其拥有与鼠标追踪的 x 和 y 坐标相等的 x 和 y 值(我们在上述行动中获取并存储在变量 x_mouse1 和 y_mouse1 中)。
为此,我们需要选择 Set Object Property 动作,以便 Target 的 mouse_user_1 (在下面的图像中仅写为“mouse”,因为对话框缩短了标题)及其属性 X 的值 (=) 为 x_mouse1+5,这是一个 算术操作。 请参考这个 逐步解释 以了解如何设置。

此时您可能会想知道为什么输入字段中会出现 +5……这是因为我们需要创建一个偏移量,因为这个对象实际上是一个包含嵌入图像的文本对象(如本次演练的 开头所述)。因此,如果您需要构建您的研究并使用户能够看到他们自己定制的光标,就像我们在这里做的那样,但也可以单击研究中的其他对象,那么如果您不创建这个偏移量,这将是不可能的(除非您选择省略光标的图像,仅保留文本标签)。
接下来,我们选择 +Add Property 并指向相同的图像对象,选择 Y 属性并将其设置为变量 y_mouse1。
我们重复相同的过程,但只选择其他为参与者 2 专门设置的变量:

在这里,我们指向对象 mouse_user_2 并分配相应的变量:

所有这些动作一起使两个光标对象为两个参与者移动,通过从数组变量读取值,然后使用这些数字值设置对象的 x 和 y 值。
EVENT: end
接下来,我们创建一个事件以正式结束数据记录过程,并通过插入一个“结束”按钮来存储数据,该按钮在用作触发器时,将导致一个控制动作,在其中进行 Accept/End Session 动作。
Trigger
要结束会话,按钮触发器是点击 End Button 将触发会话结束。

Action
该动作是接受/结束会话。

再次请注意,此演示旨在学习目的,并且只是共享鼠标和光标位置的多用户研究设置的众多方法之一。关于如何实现此效果的另一个示例将在接下来的部分中描述。
Approach 2: Single Variable Approach for Sharing Cursors in Multi-User Studies
在另一个演示中, 我们展示了与使用数组不同的选项,使用单一值(即直接调用 X 和 Y 坐标)。

这是这个演示的完整预览,包括最终记录的数据预览:
Single Object for the Cursor
此演示与之前的演示不同,因为光标只有一个对象,而不是两个。此方法非常适合只是想显示“对手”或“队友”光标位置的多用户研究。

Custom Variables
这个演示还包括以下自定义变量及其规格。虽然这个演示的变量较少,但需要使用的事件/动作却比前面的数组示例多。

EVENT: sendMove
触发器是鼠标移动:

动作是记录触发器特定的鼠标 X 坐标和 Y 坐标在两个分别命名为参与者 1 的变量中。

在这个 if/then 条件下的下一步动作用于将这两个值分配给参与者 2。

然后我们添加一个“Else If”条件,以记录与触发器相关的鼠标 X 坐标和 Y 坐标的特定值到两个单独的变量中,这两个变量的名称明确表示参与者 2。

接下来的操作用于将这两个值分发给参与者 1。

事件:receiveMove1
现在我们需要一个事件来传输鼠标坐标。因此,如果与参与者 1 相关的特定变量值发生变化,它们将作为触发器使用:

然后我们使用一个动作来更新光标位置的对象属性,使其采用这些值。本质上,如果你是参与者 2,则对手对象将采用参与者 1 变量的坐标:

事件:receiveMove2
我们在这里做相同的事情。如果你是参与者 1,则对手对象将采用参与者 2 变量的坐标:


结论
该演示展示了在多用户研究设置中使用鼠标坐标更新对象属性的众多方法中的两种。你可以使用数组
演示详情:逐步输入值
如果你仍然在 Labvanced 中找到自己的方向或只是需要一些额外的澄清,下面的部分将逐步向你展示如何实现某些命令以及你需要通过菜单采取的步骤:
- 在需求操作中指定
Role_ID==1 - 选择要记录在变量中的鼠标 [X,Y] 数组以进行鼠标跟踪
- 使用算术运算来设置对象属性
在需求操作中指定 Role_ID==1
在上面的演示中,这一行出现得很频繁,那么你该如何获得这样呢?

首先 +Add Action 和选择控制操作 → 需求操作(如果…那么),因为这是它在此演示中频繁出现的语境。

接下来,+ Requirement 以便你可以更详细地指定 If 条件。
对于第一个铅笔图标(正式称为 值选择菜单),选择 Variable → Select Variable 以指向 Role_Id 变量。

这将打开变量菜单,其中存储了所有本地/全局变量。在顶部面板下,Global Variables 中你将找到 Role_Id 变量。选择它。

接下来,在另一个铅笔图标上,你需要指定参与者的角色 id 的值。因此,转到 常量值 → 数字

然后简单输入数字 1。大功告成!

使用算术运算来设置对象属性
设置光标位置是通过使用设置对象属性动作来完成的,指定目标对象、其属性,然后指定作为对象属性的新值的变量值。

选择对象操作:

对于 Target,点击第一个 none 并从列表中选择第一个光标对象 mouse_user_1。对于对象属性的第二个列表,选择 X 选项:

然后,点击铅笔图标。选择 Operations 并从菜单中选择 Arithmetic 选项:

点击第一个铅笔图标并选择 Variable → Select Variable,会弹出一个变量对话框,你可以从中选择 x_mouse1 变量:

然后,点击第二个铅笔图标并选择 Constant Value → Numeric,在出现的字段中输入数字 5。

因为这与演示相关,其中对象是图像加文本的组合,因此我们需要将值偏移 5 个点,以便底下的对象可以被点击:

点击 +Add Property 下面,指示 y_mouse1 变量将分配给 Y 对象的 mouse_user_1 对象属性。
