本文发布于 1286 天前。
基础
ASS的一行字幕如有多个绘图,那么它们会被依次并排排列(an7
下)。
具体来说,在an7
定位时,an7
的字幕定位拖放点相当于绘图的(0,0)
,根据绘图代码,绘图的位置也是相对于(0,0)
确定的。如果在一行内有多个绘图时,只有第一个绘图的(0,0)
为an7
字幕行的拖放点,之后所有图形的(0,0)
都向右偏移,且偏移量为之前图形的宽度。
例如,第一个图形的宽度为20,那么第二个图形的绘图(0,0)
点实际上变成了(20,0)
。
{\\p1}m 0 0 l 100 0 100 50 0 50 {\\1cFFF}m 0 0 l 100 0 100 50 0 50
取消偏移
想要取消偏移,让这两个图形叠加在一起,方法也很简单,只需要向左(通常)平移后面的图形本身的坐标。
{\\p1}m 0 0 l 100 0 100 50 0 50 {\\1cFFF}m -50 0 l 50 0 50 20 -50 20
在自动化中,也可以用Yutils的_G.Yutils.shape.bounding(text)
函数求出某个绘图的宽度,再用_G.Yutils.shape.move(shape,x,y)
进行相应的平移。
以下是一段示例代码
Comment: 0,0:00:00.00,0:00:00.00,Default,,0,0,0,code once,square= "m 0 0 l 100 0 100 50 0 50"
Comment: 0,0:00:00.00,0:00:00.00,Default,,0,0,0,code line,color={} for i=1, 5 do color[i]=_G.interpolate_color(i/5,"&H00FFFFFF","&H000303A0") end t="" a,b,c,d=_G.Yutils.shape.bounding(square) w=c-a h=d-b for i=1,5 do t=t.."{\\c"..color[i].."}"..square square=_G.Yutils.shape.move(square,-w,-h) end
Comment: 0,0:00:00.00,0:00:00.00,Default,,0,0,0,template line notext noblank,{\p1\an7\pos($lleft,$ltop)}!t!
Comment: 0,0:00:00.00,0:00:05.00,Default,,0,0,0,karaoke,aa
其中的code行展开来为
color={}
for i=1, 5 do
color[i]=_G.interpolate_color(i/5,"&H00FFFFFF","&H000303A0")
end
t=""
a,b,c,d=_G.Yutils.shape.bounding(square) --获取矩形的两对定位点
w=c-a --矩形宽
h=d-b --矩形高
for i=1,5 do
t=t.."{\\c"..color[i].."}"..square
square=_G.Yutils.shape.move(square,-w,-h) --移动下一次即将生成的图形
end
可以类似水平渐变,写一个垂直渐变的自动化。
Comment: 0,0:00:00.00,0:00:00.00,Default,,0,0,0,code line,square= "m 0 0 l "..line.width.." 0 "..line.width.." 1 0 1"
Comment: 0,0:00:00.00,0:00:00.00,Default,,0,0,0,code line,shape = _G.decode.create_font(line.styleref.fontname, line.styleref.bold, line.styleref.italic, line.styleref.underline, line.styleref.strikeout, line.styleref.fontsize).text_to_shape(line.text_stripped)
Comment: 0,0:00:00.00,0:00:00.00,Default,,0,0,0,code line,color={} for i=1, line.height do color[i]=_G.interpolate_color(i/line.height,"&H00FFFFFF","&H000303A0") end t="" a,b,c,d=_G.Yutils.shape.bounding(square) w=c-a h=d-b for i=1,line.height do t=t.."{\\c"..color[i].."}"..square square=_G.Yutils.shape.move(square,-w,h) end
Comment: 0,0:00:00.00,0:00:00.00,Default,,0,0,0,template line notext noblank,{\p1\an7\pos($lleft,$ltop)\clip(!_G.Yutils.shape.move(shape,$left,$top)!)}!t!
Comment: 1,0:00:00.00,0:00:05.00,Default,,0,0,0,karaoke,忘不了你的声音