我使用的是Builder v1.80.06
我可以很容易地改变多边形的位置
e.g。我有一个职位列表
positions=[[1,1],[1.1,0.9],...]
并在'位置字段'有:
$positions[0]
然后在每次重复时在代码块中更改它的值。
但我希望以类似的方式改变尺寸并使用$ sizes列表,但会收到错误。
查看生成的代码,问题出在对象创建阶段。生成的代码是:
表示硬编码多边形(即ok)
polygon_1 = visual.Rect(win=win, name='polygon_1',
width=[1.5, .2][0], height=[1.5, .2][1],
ori=0, pos=[0, -0.6],
lineWidth=1, lineColor=[1,1,1], lineColorSpace=u'rgb',
fillColor=[0,1,0], fillColorSpace=u'rgb',
opacity=1,interpolate=True)
由变量填充的(不工作):
polygon_2= visual.Rect(win=win, name='polygon_2',
width=1.0[0], height=1.0[1],
ori=0, pos=[0,0],
lineWidth=1, lineColor=[1,1,1], lineColorSpace=u'rgb',
fillColor=[1,0,0], fillColorSpace=u'rgb',
opacity=1,interpolate=True)
它抱怨(正确地)1.0[0]
对宽度和高度参数没有意义
即使我在实验开始时在代码块中实例化sizes
列表,而不是阅读$sizes[0]
,也会使用默认的浮点值1.0
。
有关如何使用构建器在运行时动态更改多边形大小的任何其他建议吗?
我可以把生成的代码放到编码器中我想并解决问题,但是我想把它交给研究员,所以希望能够维护它。
感谢,
答案 0 :(得分:1)
如果你将大小设置为一个元组值[1.2,1.5]或[1,1]的元组/列表,那不能解决它吗?
答案 1 :(得分:1)
在运行时更改属性时,只需更改现有刺激的属性,而不是实例化全新刺激。后者在资源方面相当沉重,导致时机不可靠。
stim = visual.Rect(win) # instantiation, ressource heavy
stim.attribute = newValue # change attribute. lighter.
我可以想到两种方式,你可以用一种非常整洁的方式做到这一点。第一种是显式设置宽度和高度而不是size属性,但使用类似于大小的值。所以(删除所有不感兴趣的参数):
polygon_2 = visual.Rect(win)
# Unpack the x,y-sizes to the stimulus .width and .height attributes
newSize = (1.5, 0.2)
polygon_2.width, polygon_2.height = newSize
第二个,如果size属性非常重要,可以使用带有edges=4
的Polygin使其成为矩形:
polygon_2 = visual.Polygon(win=win, edges=4, size=(1.5, 0.2))
# Setting size
polygon_2.size = (0.8, 0.4)
首先尝试Jon的建议。但visual.Rect
和visual.Circle
的想法是使用替代的Polygon' size
和vertices
来获得更相关的内容。因此,如果宽度/高度等不是1,则尺寸可以做出意想不到的事情。