您说得对,.text.align 和 .text.wrapping 属性仅在文本流的逻辑级别与“对齐”有关,即多行文本刺激的行如何对齐 相对于彼此在它们被读取的坐标系中(与整个刺激的物理方式无关)。
您正在谈论的属性——旋转、“垂直对齐”,甚至如果只有一行文本在播放,甚至你所谓的“水平对齐”——都不是特定于文本的属性:它们同样适用于任何矩形补丁。因此,您要操作的属性是stim.* 级别的属性,而不是stim.text.*。具体来说,它们是.anchor 和.rotation,如下所示:
#!/usr/bin/env python -m Shady shell
import Shady, Shady.Text
w = Shady.World(fullScreenMode=False)
axes = w.Stimulus(Shady.PixelRuler(1000), anchor=Shady.LOWER_LEFT, size=600)
xlabel = w.Stimulus(text='x axis label', x=300, y=0, anchor=Shady.TOP)
ylabel = w.Stimulus(text='y axis label', x=0, y=300, anchor=Shady.BOTTOM, rotation=90)
speed = 30
msg = w.Stimulus(
xy = 300,
rotation = Shady.Integral( lambda t: speed ),
text = 'Change msg.anchor to anything\nbetween [-1,-1] and [+1,+1]\nand see what happens',
text_blockbg = [0, 0, 0, 0.5],
)
Shady.AutoFinish(w)
在Shady.Text 的未记录函数中的某个地方,可能有某种方法可以提前估计渲染文本刺激的大小。事实上,仔细研究后,看起来最不烦人的方法是实际制作纹理数组:
img = Shady.Text.MakeTextImage('hello world')
heightInPixels, widthInPixels, _ = img.shape
但希望通过适当地使用.anchor,您将不再需要它。