TCAX 字幕特效制作工具官方论坛 | ASS | TCAS | Python | Aegisub | Lua

 找回密码
 加入社区
楼主: milkyjing

[ASS特效教程入门系列] 三. 曲线轨迹的简单应用及逐帧特效 [复制链接]

Moderator

疯子

Rank: 5Rank: 5

发表于 2013-2-2 10:59:20 |显示全部楼层
爱雪音MiKu 发表于 2013-2-2 10:50
呜咕。。。生成多个曲线有什么简单的方法吗0.0?。。还是就复制一下代码? ...

复制代码。。。或者直接一个for循环不就好了么?

Rank: 4

发表于 2013-2-2 11:15:43 |显示全部楼层
渣渣疯子 发表于 2013-2-2 10:51
基本和用字体粒子差不多。。。唯一的区别就是坐标方面的差别=。=。。。我是没控制好。。。 ...

呜咕。。。0.0直接固定粒子的开始位置。。。然后慢慢找想要的控制点呢0.0?。。是因为粒子太多所以不好控制的吗

Rank: 4

发表于 2013-2-2 11:16:16 |显示全部楼层
渣渣疯子 发表于 2013-2-2 10:59
复制代码。。。或者直接一个for循环不就好了么?

呜咕。。V。。明白的说0.0

Moderator

疯子

Rank: 5Rank: 5

发表于 2013-2-2 11:19:37 |显示全部楼层
爱雪音MiKu 发表于 2013-2-2 11:15
呜咕。。。0.0直接固定粒子的开始位置。。。然后慢慢找想要的控制点呢0.0?。。是因为粒子太多所以不好控 ...

不是,这个和字体切成粒子是一个用法,但是一般图形用的时候都不是原大小,这个切割出来的位置都是按原大小的位置来的。。。我是有点弄不明白它的原始位置,然后就不知道怎么控制它们移动了。。。

Rank: 4

发表于 2013-2-2 11:23:05 |显示全部楼层
渣渣疯子 发表于 2013-2-2 11:19
不是,这个和字体切成粒子是一个用法,但是一般图形用的时候都不是原大小,这个切割出来的 ...

呜咕。。。0.0。。明白的说。。那直接把代码写成   图形的大小= 字体的大小+ N   0.0?。。。偶这个简单的大脑想的办法。。。估计没用

Rank: 4

发表于 2013-2-2 11:23:56 |显示全部楼层
渣渣疯子 发表于 2013-2-2 11:19
不是,这个和字体切成粒子是一个用法,但是一般图形用的时候都不是原大小,这个切割出来的 ...

呜咕。。。曲线可以在Z轴上移动吗。。偶想带一点立体。。

Moderator

疯子

Rank: 5Rank: 5

发表于 2013-2-2 11:31:12 |显示全部楼层
爱雪音MiKu 发表于 2013-2-2 11:23
呜咕。。。0.0。。明白的说。。那直接把代码写成   图形的大小= 字体的大小+ N   0.0?。。。偶这个简单 ...

图形的大小是用{\p1}这个后面的数字控制,或者fsc,和字体大小不一样,字体大小在切割粒子的时候是有考虑的,但是图形切割里没有。。。所以麻烦点。。。至于立体感,你弄出来的东西本身就是在一个平面上吧。Z轴不也就是在直角坐标系里画一条斜线么。。。Z轴移动,不就是让大小发生一些变化么?

Rank: 4

发表于 2013-2-2 11:35:10 |显示全部楼层
渣渣疯子 发表于 2013-2-2 11:31
图形的大小是用{\p1}这个后面的数字控制,或者fsc,和字体大小不一样,字体大小在切割粒子的时候是有考虑 ...

啊呜。。。V。。这样是很难控制呢。。那TCAX中为什么不创建一个可以控制图形大小的函数呢0.0。。【偶想的太天真了0.0?

Moderator

疯子

Rank: 5Rank: 5

发表于 2013-2-2 11:37:36 |显示全部楼层
爱雪音MiKu 发表于 2013-2-2 11:35
啊呜。。。V。。这样是很难控制呢。。那TCAX中为什么不创建一个可以控制图形大小的函数呢0.0。。【偶想的 ...

这个可以问问M大。。。我也只是会用不会写。。。

Rank: 4

发表于 2013-2-2 13:12:32 |显示全部楼层
爱雪音MiKu 发表于 2013-2-2 10:50
呜咕。。。生成多个曲线有什么简单的方法吗0.0?。。还是就复制一下代码? ...

加个循环,套写随机坐标就行了

Rank: 4

发表于 2013-2-2 13:50:18 |显示全部楼层
渣渣疯子 发表于 2013-2-2 11:37
这个可以问问M大。。。我也只是会用不会写。。。

啊呜。。。0.0。。M大大好厉害

Rank: 4

发表于 2013-2-2 13:52:51 |显示全部楼层
kk123456 发表于 2013-2-2 13:12
加个循环,套写随机坐标就行了

呜咕。。。循环0.0。。循环就是for (EFT1,EFT2,num)这样写么0.0?。。然后下面加坐标

Rank: 4

发表于 2013-2-2 14:07:04 |显示全部楼层
  1. from tcaxPy import *

  2. def tcaxPy_Main(_i, _j, _n, _start, _end, _elapk, _k, _x, _y, _a, _txt):

  3.     ASS_BUF  = []        # 保存ASS特效
  4.     TCAS_BUF = []        # 保存TCAS特效

  5.     ##### 主要特效编写操作 #####

  6.     ts = _start + _elapk - 20       # 效果开始时间
  7.     _Fs = GetVal(val_FontSize)      # 字体大小
  8.     EFT1 = alpha1(HexToDec('AA')) + alpha3(HexToDec('AA')) + color1('FFFFFF') + \
  9.             bord(5) + blur(5) + t(0, 100, bord(3) + blur(3)) + fad(0, 200)
  10.     EFT2 = alpha1(HexToDec('AA')) + alpha3(HexToDec('00')) + color1('FFFFFF') + color3('FFFFFF') + \
  11.             bord(3) + blur(3) + t(0, 100, bord(1) + blur(1) + alpha3(HexToDec('44'))) + fad(0, 200)
  12.     for k in range(2):   #加个循环,生成两条不同的曲线
  13.         num = 40    # 曲线上点的个数
  14.         xs = _x + randint(-60, 60)    # 开始点
  15.         ys = _y + randint(-60, 60)
  16.         xc1 = xs + randint(-50, 50)     # 控制点1
  17.         yc1 = ys + randint(-90, 90)
  18.         xc2 = xc1 + randint(-20, 50)    # 控制点2
  19.         yc2 = yc1 + randint(-5, 50)
  20.         xe = _x     # 结束点
  21.         ye = _y
  22.         points = Bezier3(num, xs, ys, xe, ye, xc1, yc1, xc2, yc2)   # 3阶贝塞尔曲线, 控制点的生成是重点以及难点
  23.    
  24.         for i in range(num):
  25.             POS = pos(points[i][0], points[i][1])   # 获取曲线上点坐标
  26.             EFT = POS + EFT1 + color3('5A3AFF')
  27.             ass_main(ASS_BUF, SubL(ts + i, ts + i + 30, 15, Pix_Style), EFT, PixPt())
  28.             EFT = POS + EFT2
  29.             ass_main(ASS_BUF, SubL(ts + i, ts + i + 30, 15, Pix_Style), EFT, PixPt())
  30.    

  31.     ##### 将结果返回给tcax进行处理 #####

  32.     return (ASS_BUF, TCAS_BUF)
复制代码
例如这样

Moderator

疯子

Rank: 5Rank: 5

发表于 2013-2-2 15:15:32 |显示全部楼层
爱雪音MiKu 发表于 2013-2-2 13:52
呜咕。。。循环0.0。。循环就是for (EFT1,EFT2,num)这样写么0.0?。。然后下面加坐标 ...

循环有两种,一种是for循环,一种是while循环。。。while循环的话,之前的哪个脚本里也有用到,你可以看看butterfly下面有用到

Rank: 4

发表于 2013-2-2 17:03:07 |显示全部楼层
kk123456 发表于 2013-2-2 14:07
例如这样

呜咕。。求详细讲解的说(T.T)。。。偶不会用循环函数的说。。偶写成这样了
  1. from tcaxPy import *

  2. def tcaxPy_Main(_i, _j, _n, _start, _end, _elapk, _k, _x, _y, _a, _txt):

  3.     ASS_BUF  = []        # 保存ASS特效
  4.     TCAS_BUF = []        # 保存TCAS特效

  5.     ##### 主要特效编写操作 #####

  6.     ts = _start + _elapk - 20       # 效果开始时间
  7.     _Fs = GetVal(val_FontSize)      # 字体大小
  8.     EFT1 = alpha1(HexToDec('AA')) + alpha3(HexToDec('AA')) + color1('FFFFFF') + \
  9.             bord(5) + blur(5) + t(0, 100, bord(3) + blur(3)) + fad(0, 200)
  10.     EFT2 = alpha1(HexToDec('AA')) + alpha3(HexToDec('00')) + color1('FFFFFF') + color3('FFFFFF') + \
  11.             bord(3) + blur(3) + t(0, 100, bord(1) + blur(1) + alpha3(HexToDec('44'))) + fad(0, 200)
  12.     for k in range(2):
  13.     num = 60    # 曲线上点的个数
  14.     xs = _x     # 开始点
  15.     ys = _y - 30
  16.     xc1 = _x - 30  # 控制点1
  17.     yc1 = _y
  18.     xc2 = _x    # 控制点2
  19.     yc2 = _y + 30
  20.     xe = _x     # 结束点
  21.     ye = _y
  22.     ixs = _x     # 开始点
  23.     iys = _y + 30
  24.     ixc1 = _x + 30  # 控制点1
  25.     iyc1 = _y
  26.     ixc2 = _x    # 控制点2
  27.     iyc2 = _y - 30
  28.     ixe = _x     # 结束点
  29.     iye = _y
  30.     points1 = Bezier3(num1, xs, ys, xe, ye, xc1, yc1, xc2, yc2)   # 3阶贝塞尔曲线, 控制点的生成是重点以及

  31. 难点
  32.     points2 = Berier3f(num2,ixs, iys, ixe, iye, ixc1, iyc1, ixc2, iyc2)
  33.     for i in range(num):
  34.         POS = pos[(points1[i][0], points1[i][1]) + (points2[i][0], points2[i][0])]   # 获取曲线上点坐标
  35.         EFT = POS + EFT1 + color3('5A3AFF')
  36.         ass_main(ASS_BUF, SubL(ts + i, ts + i + 30, 15, Pix_Style), EFT, PixPt())
  37.         EFT = POS + EFT2
  38.         ass_main(ASS_BUF, SubL(ts + i, ts + i + 30, 15, Pix_Style), EFT, PixPt())

  39.     ##### 将结果返回给tcax进行处理 #####

  40.     return (ASS_BUF, TCAS_BUF)
复制代码
呜咕。。执行总是失败

Rank: 4

发表于 2013-2-2 17:04:27 |显示全部楼层
渣渣疯子 发表于 2013-2-2 15:15
循环有两种,一种是for循环,一种是while循环。。。while循环的话,之前的哪个脚本里也有 ...

呜咕。。。循环语句都没用过的说。。所以看了不是很明白的说

Moderator

疯子

Rank: 5Rank: 5

发表于 2013-2-2 17:45:23 |显示全部楼层
爱雪音MiKu 发表于 2013-2-2 17:03
呜咕。。求详细讲解的说(T.T)。。。偶不会用循环函数的说。。偶写成这样了呜咕。。执行总是失败{:onion ...

缩进不对,缩进不对啊。。。for k in range(2):底下缩进不对,你对比一下上面的看看

Moderator

疯子

Rank: 5Rank: 5

发表于 2013-2-2 17:45:55 |显示全部楼层
爱雪音MiKu 发表于 2013-2-2 17:04
呜咕。。。循环语句都没用过的说。。所以看了不是很明白的说

这两个循环去看看python的教程吧,里面有讲

Rank: 4

发表于 2013-2-2 18:03:28 |显示全部楼层
渣渣疯子 发表于 2013-2-2 17:45
缩进不对,缩进不对啊。。。for k in range(2):底下缩进不对,你对比一下上面的看看 ...

啊呜。。明白的说
  1. from tcaxPy import *

  2. def tcaxPy_Main(_i, _j, _n, _start, _end, _elapk, _k, _x, _y, _a, _txt):

  3.     ASS_BUF  = []        # 保存ASS特效
  4.     TCAS_BUF = []        # 保存TCAS特效

  5.     ##### 主要特效编写操作 #####

  6.     ts = _start + _elapk - 20       # 效果开始时间
  7.     _Fs = GetVal(val_FontSize)      # 字体大小
  8.     EFT1 = alpha1(HexToDec('AA')) + alpha3(HexToDec('AA')) + color1('FFFFFF') + \
  9.             bord(5) + blur(5) + t(0, 100, bord(3) + blur(3)) + fad(0, 200)
  10.     EFT2 = alpha1(HexToDec('AA')) + alpha3(HexToDec('00')) + color1('FFFFFF') + color3('FFFFFF') + \
  11.             bord(3) + blur(3) + t(0, 100, bord(1) + blur(1) + alpha3(HexToDec('44'))) + fad(0, 200)
  12.     for k in range(2):
  13.          num1 = 60    # 曲线上点的个数
  14.          xs = _x     # 开始点
  15.          ys = _y - 30
  16.          xc1 = _x - 30  # 控制点1
  17.          yc1 = _y
  18.          xc2 = _x    # 控制点2
  19.          yc2 = _y + 30
  20.          xe = _x     # 结束点
  21.          ye = _y
  22.          num2 = 60
  23.          ixs = _x     # 开始点
  24.          iys = _y + 30
  25.          ixc1 = _x + 30  # 控制点1
  26.          iyc1 = _y
  27.          ixc2 = _x    # 控制点2
  28.          iyc2 = _y - 30
  29.          ixe = _x     # 结束点
  30.          iye = _y
  31.          points1 = Bezier3(num1, xs, ys, xe, ye, xc1, yc1, xc2, yc2)   # 3阶贝塞尔曲线, 控制点的生成是重点

  32. 以及难点
  33.          points2 = Berier3(num2,ixs, iys, ixe, iye, ixc1, iyc1, ixc2, iyc2)
  34.          for i in range(num):
  35.               POS = pos[(points1[i][0], points1[i][1]) + (points2[i][0], points2[i][0])]   # 获取曲线上点坐标
  36.               EFT = POS + EFT1 + color3('5A3AFF')
  37.               ass_main(ASS_BUF, SubL(ts + i, ts + i + 30, 15, Pix_Style), EFT, PixPt())
  38.               EFT = POS + EFT2
  39.               ass_main(ASS_BUF, SubL(ts + i, ts + i + 30, 15, Pix_Style), EFT, PixPt())

  40.     ##### 将结果返回给tcax进行处理 #####

  41.     return (ASS_BUF, TCAS_BUF)
复制代码
呜咕。。这个是改版0.0。。points2 = Berier3(num2,ixs, iys, ixe, iye, ixc1, iyc1, ixc2, iyc2)
  这句总是显示错误(T.T)

Moderator

疯子

Rank: 5Rank: 5

发表于 2013-2-2 18:16:44 |显示全部楼层
本帖最后由 渣渣疯子 于 2013-2-2 18:18 编辑
爱雪音MiKu 发表于 2013-2-2 18:03
啊呜。。明白的说呜咕。。这个是改版0.0。。points2 = Berier3(num2,ixs, iys, ixe, iye, ixc1, iyc1, ix ...


你那个for i in range(num):...你的不是num1 num2么?。。。都一样的话,统一一个num = 60不就好了么?你的pos好像也有问题。另外,不行就把错误截图发上来看看
您需要登录后才可以回帖 登录 | 加入社区

GitHub|TCAX 主页

GMT+8, 2018-10-24 07:43

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部
RealH