在NetLogo中检测鼠标单击/鼠标

时间:2014-03-02 22:57:11

标签: user-interface mouse netlogo

在NetLogo中使用mouse-down?进行鼠标操作通常会导致操作发生的次数过多。例如,如果您想让用户点击创建新的海龟,您可以将永久按钮挂钩到以下过程:

to add-turtle
  if mouse-down? [
    crt 1 [ setxy mouse-xcor mouse-ycor ]
  ]
end

问题是这通常导致每次点击创建许多海龟。我想做点什么:

to add-turtle
  if mouse-clicked? [
    crt 1 [ setxy mouse-xcor mouse-ycor ]
  ]
end

mouse-clicked?在用户点击时(在他们离开鼠标按钮后立即)的情况下为真。

4 个答案:

答案 0 :(得分:3)

不幸的是,你必须自己跟踪它,但好消息是它并不难。

关键是创建一个名为mouse-was-down?的全局,如果在上次调用面向鼠标的过程中mouse-down?为真,则设置为true。然后mouse-clicked?可以定义如下:

to-report mouse-clicked?
  report (mouse-was-down? = true and not mouse-down?)
end

它似乎与中央鼠标管理程序结合使用,该程序调用其他基于点击的程序。例如:

globals [ mouse-was-down? ]

to-report mouse-clicked?
  report (mouse-was-down? = true and not mouse-down?)
end

to mouse-manager
  let mouse-is-down? mouse-down?
  if mouse-clicked? [
    add-turtle
    ; Other procedures that should be run on mouse-click
  ]
  set mouse-was-down? mouse-is-down?
end

to add-turtle
  crt 1 [ setxy mouse-xcor mouse-ycor ]
end

如果在mouse-is-down?完成之前释放鼠标按钮,则使用mouse-manager局部变量可使行为更加一致。

答案 1 :(得分:1)

你好,这可能是为了你的目的有点迟了,但万一有人遇到同样的问题,这就是我现在在模特中解决这个问题的方法。

to add-turtle
  if mouse-down? [
    crt 1 [ setxy mouse-xcor mouse-ycor ]
    stop
  ]
end

这里的解决方法是添加一个“停止”命令来永久地杀死“create-new-turtle”按钮。唯一的权衡是你必须再次按下才能创建另一只新龟。

答案 2 :(得分:0)

Bryan Head的回答对我来说没什么用,只需点击一下就可以创造出多只海龟。

替代:

使用操作键crt 1 [ setxy mouse-xcor mouse-ycor ]执行A的(非永久)按钮。

现在你需要做的就是添加一只乌龟,用右手按住或按住A,同时用右手按住鼠标。

答案 3 :(得分:0)

以下是Bryan代码的替代方法,如果您想在单击鼠标按钮后立即执行操作(而不是等到它被释放):

globals [ mouse-clicked? ]

to mouse-manager
  ifelse mouse-down? [
    if not mouse-clicked? [
      set mouse-clicked? true
      crt 1 [ setxy mouse-xcor mouse-ycor ]
    ]
  ] [
    set mouse-clicked? false
  ]
end