0

我正在使用 Builder v1.80.06

我可以很容易地在每次重复时改变多边形的位置

例如,我有一个职位列表

positions=[[1,1],[1.1,0.9],...]

并且在“位置字段”中有:

$positions[0]

然后在每次重复时在代码块中更改它的值。

但是我想以类似的方式使用 $sizes 列表来改变大小,但会出错。

查看生成的代码,问题出在对象创建阶段。生成的代码是:

对于硬编码的多边形(即好的)

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

关于如何在运行时使用构建器动态改变多边形大小的任何其他建议?

我可以将生成的代码放入我想的编码器中并解决问题,但我想将其交给研究人员,以便他们能够维护它。

谢谢,

4

2 回答 2

1

如果您将大小设置为具有一对值 [1.2,1.5] 或 [1,1] 的元组/列表,那不能解决它吗?

于 2014-06-20T10:33:16.127 回答
1

当您在运行时更改属性时,只需更改现有刺激的属性,而不是实例化全新的刺激。后者在资源上相当繁重,导致时间不可靠。也一样

stim = visual.Rect(win)  # instantiation, ressource heavy
stim.attribute = newValue  # change attribute. lighter.

我可以想到两种方法,你可以用一种非常简洁的方式做到这一点。第一种是显式设置宽度和高度而不是大小属性,但使用类似大小的值。所以(删除所有不感兴趣的参数):

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 属性真的很重要,使用 Polyginedges=4将其变成一个矩形:

polygon_2 = visual.Polygon(win=win, edges=4, size=(1.5, 0.2))

# Setting size
polygon_2.size = (0.8, 0.4)

请先尝试乔恩的建议。visual.Rect但是使用and的想法visual.Circle是使用替代 Polygon 的sizevertices更相关的东西。因此,如果宽度/高度等不是 1,则 size 可以做意想不到的事情。

于 2014-06-20T20:10:56.587 回答