- UID
- 24
- 积分
- 1778
- 帖子
- 99
- 主题
- 5
- 论坛币
- 3492
- 威望
- 8
- EP值
- 1453
- MP值
- 11
- 阅读权限
- 100
- 注册时间
- 2011-8-5
- 在线时间
- 137 小时
- 最后登录
- 2014-6-18
|
本帖最后由 showjim 于 2013-2-4 10:55 编辑
第三课:脚本教程2
序
这里将讲解一个NyuFX的代码实例。效果为字体粒子化和Mask的使用。
代码&字幕下载:
tutorial_2.zip
(2.31 KB, 下载次数: 54, 售价: 1 论坛币)
正文
此代码为NyuFX内置模板实例,我在这对其稍微讲解。- function roumaji(line, l)
- l.style = "p" --像素点不需要边宽并且设定7为对其方式
- for si, syl in ipairs(line.syls) do
- l.end_time = line.start_time + syl.end_time + 400
- for pi, pixel in ipairs( convert.text_to_pixels(syl.text, line.styleref) ) do
- local x, y = pixel.x + math.round(syl.left), pixel.y + math.round(syl.top)
- local alpha = (pixel.a == 255) and "" or ("\\1a" .. convert.a_to_ass(pixel.a)) ---此句用于获取像素的透明信息
- l.start_time = line.start_time - line.infade / 2 * math.random(100) / 100
- local start_offset = (line.start_time + syl.start_time) - l.start_time ---设定像素其实移动时间
- l.text = string.format("{\\move(%d,%d,%d,%d,%d,%d)\\fad(0,400)%s\\p1}m 0 0 l 1 0 1 1 0 1"
- , x, y, x + math.random(-10,10), y + math.random(-10,10), start_offset, start_offset + syl.duration + 400
- , alpha) ---1.这个string是用来指定像素点在特定时间范围内从原位置运动到末裔随机点; 2.此处要特别注意alpha,这个是用来还原字体边角。
- io.write_line(l)
- end
- end
- end
- --此处基本同上
- function kanji(line, l)
- l.style = "p"
- for si, char in ipairs(line.chars) do
- l.end_time = line.start_time + char.end_time + 400
- for pi, pixel in ipairs( convert.text_to_pixels(char.text, line.styleref) ) do
- local x, y = pixel.x + math.round(char.left), pixel.y + math.round(char.top)
- local alpha = (pixel.a == 255) and "" or ("\\1a" .. convert.a_to_ass(pixel.a))
- l.start_time = line.start_time - line.infade / 2 * math.random(0,100) / 100
- local start_offset = (line.start_time + char.start_time) - l.start_time
- l.text = string.format("{\\move(%d,%d,%d,%d,%d,%d)\\fad(0,400)%s\\p1}m 0 0 l 1 0 1 1 0 1", x, y, x + math.random(-10,10), y + math.random(-10,10), start_offset, start_offset + char.duration + 400, alpha)
- io.write_line(l)
- end
- end
- end
- function sub(line, l)
- --Text
- l.start_time = line.start_time - line.infade/2
- l.end_time = line.end_time + line.outfade/2
- l.text = string.format("{\\fad(%d,%d)\\bord0\\1c&H101010&}%s", line.infade/2, line.outfade/2, line.text)
- io.write_line(l) ---
-
- --Mask,这个对用TCAX的应该很熟悉
- local mask = shape.move( convert.text_to_shape(line.text, line.styleref), line.left*8, line.top*8) --字体会以原8倍大小转化成ASSDraw代码
- local shine = shape.ellipse(20, 20) --生成一个椭圆型
- l.style = "p"
- l.start_time = line.start_time
- l.end_time = line.end_time
- l.text = string.format("{\\move(%.3f,%.3f,%.3f,%.3f)\\blur4\\clip(4,%s)\\p1}%s", line.left - 20, line.top + (line.height - 20) / 2, line.right, line.top + (line.height - 20) / 2, mask, shine)
- io.write_line(l)
- end
- for li, line in ipairs(lines) do
- if line.styleref.alignment >=7 then
- roumaji( line, table.copy(line) )
- elseif line.styleref.alignment <=3 then
- sub( line, table.copy(line) )
- else
- kanji( line, table.copy(line) )
- end
- io.progressbar(li / #lines) --此为让NyuFX的UI显示生成进度
- end
复制代码 此代码由三个子函数和一个main组成,虽然main没明写……
它们分别为roumaji()、sub()、kanji()和最后的for循环(相当于main了)。
代码解释如注释,这里讲解代码里的一些NyuFX的关键字的重点用法:
1. convert.text_to_pixels :
代码里调用如下:convert.text_to_pixels(syl.text, line.styleref),syl.text指音节里的字,line.styleref指此行的字体样式。
2. \\clip(4,%s):这个出现在sub函数中,%s指代之前定义的mask,而“4”代表缩放比。
代码效果预览:
http://www.tudou.com/programs/view/ixTBqEH_NSo/ |
-
1
查看全部评分
-
|