在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?
在用户点击时(在他们离开鼠标按钮后立即)的情况下为真。
答案 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