Psychopy--如何用鼠标和键盘控制对象移动?

从简到难逐步完成各种实现方式

创建对象

首先创建一个rutine,然后新建几个对象

  • code
  • polygon
  • mouse
  • key_resp

鼠标控制

在code 模块的 Each frame部分加入:

1
2
3
4
5
6
# 当鼠标按住polygon时,更新polygon的坐标为鼠标坐标
if mouse.isPressedIn(polygon):
polygon.pos = mouse.getPos()

# 刷新polygon
polygon.draw()

键盘控制

在code 模块的 Each frame部分加入:

1
2
3
4
5
6
# 按方向键up时,更新polygon的坐标
if key_resp.getKeys(keyList=["up"]):
polygon.pos = polygon.pos + (0, 0.1)

# 刷新polygon
polygon.draw()

同理可以加入其它按键以及模块

然后开始进阶模式

加入虚拟网格

为了控制对象的位置,将屏幕划分为看不见的网格,然后将移动对象对齐到网格
非常简单,只需要控制位置坐标的精度,即四舍五入

1
2
polygon.pos = np.around(polygon.pos, decimals=1)

鼠标、键盘同时控制

稍微改动结合即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
if mouse.isPressedIn(rect):

picked_rect = rect
picked_rect.pos = mouse.getPos()
elif mouse.isPressedIn(tri):
picked_rect = tri
picked_rect.pos = mouse.getPos()
else:
picked_rect.pos= np.around(picked_rect.pos, decimals=1)


if key_control.getKeys(keyList=["up"]):
picked_rect.pos = picked_rect.pos + (0, 0.1)
elif key_control.getKeys(keyList=["down"]):
picked_rect.pos = picked_rect.pos - (0, 0.1)
elif key_control.getKeys(keyList=["left"]):
picked_rect.pos = picked_rect.pos- (0.1, 0)
elif key_control.getKeys(keyList=["right"]):
picked_rect.pos = picked_rect.pos+ (0.1, 0)


picked_rect.draw()

献上psychopy builder实验文件

moveObjByMouseOrKeys_ns.psyexp

moveObjByMouseOrKeys_ns.py

Psychopy--如何用鼠标和键盘控制对象移动?

https://neurospider.cn/post/50548/

Author

SuperSpider

Posted on

2022-07-11

Updated on

2022-07-12

Licensed under