| 
UID2积分8682帖子2905主题199论坛币13044 威望16 EP值2349 MP值15 阅读权限200注册时间2011-8-3在线时间2597 小时最后登录2024-8-28
 
   
 | 
| 说明: 以下脚本需要用到small_code中的tu2lis函数(作用是将图形转换成点). 关于small_code模块, 我已经获得了small大的授权, 以后将以拓展模块的形式发布TCAX兼容(二次修改)版.
 
 关于此脚本我就不做太多解释了, 如有问题, 请直接在此跟帖.
 预览请见此帖: http://www.tcax.org/forum.php?mod=viewthread&tid=43复制代码from tcaxPy import *
from extLibs.small_code import *
def tcaxPy_Init():
    global _FD          # 一帧的时间
    global _Fs                # 字体大小
    global FontBord        # 首要字体
    _FD = 1000 / GetVal(val_FXFPS)
    _Fs = GetVal(val_FontSize)
    FontBord = InitFont(GetVal(val_FontFileName), GetVal(val_FaceID), _Fs, GetVal(val_Spacing), GetVal(val_SpaceScale), MakeRGB(0, 0, 0), 2, 0)
def tcaxPy_Fin():
    FinFont(FontBord)
def tcaxPy_Main(_i, _j, _n, _start, _end, _elapk, _k, _x, _y, _a, _txt):
    ASS_BUF  = []        # 保存ASS特效
    TCAS_BUF = []        # 保存TCAS特效
    ##### 主要特效编写操作 #####
    dx = _x - int(_a / 2 + 0.5)                # 一个固定操作, 将an5的坐标转换为an7
    dy = _y - int(_Fs / 2 + 0.5)        # ASS特效默认采用an5坐标, TCAS特效则采用an7坐标
    ts_0 = _start - 40 + 2 * _FD / 10 * _j
    ts = ts_0 + 40
    te = _end - 2 * _FD / 10 * (_n - _j - 1)
    te_0 = te + 40
    # 入场效果
    ass_main(ASS_BUF, SubL(Start = ts_0, End = ts_0 + 40, Layer = 1), mov(_x + 50, _y - 20, _x, _y) + fad(300, 0) + bord(3) + blur(2), _txt)
    ass_main(ASS_BUF, SubL(Start = ts_0, End = ts_0 + 40, Layer = 2), mov(_x + 50, _y - 20, _x, _y) + fad(300, 0) + bord(1) + color3('000000'), _txt)
    ass_main(ASS_BUF, SubL(Start = ts_0, End = ts_0 + 40, Layer = 3), mov(_x + 50, _y - 20, _x, _y) + fad(300, 0) + bord(0), _txt)
    # 存在效果 + 随机噪声效果
    PIX = TextPix(FontBord, _txt)    # get the pixel info
    PIX_t = PIX
    duration = te - ts
    count = int(duration * 10 / _FD)      # 闪光次数
    if _j == 0:
        global rp
        rp = []
        num = int((_end + 50 - _start) * 10 / _FD)
        for i in range(num):
            rp.append((randint(0, 1), randint(0, 1)))
    offset = 2 * _j
    for i in range(count):
        PIX_color = list(PIX_t[2])
        width = PIX_t[1][0]
        height = PIX_t[1][1]
        for j in range(randint(6, 10)):    # 闪光点个数
            xr = randint(5, _a - 5)
            yr = randint(0, _Fs - 5)
            R_IMG = RandImg(randint(1, 3), randint(1, 4), randint(1, 4))
            points = tu2lis(R_IMG)                # function borrowed from small_code library
            num = len(points)
            for m in range(num):
                w = int(points[m][0]) + xr
                if w >= width:
                    continue
                h = int(points[m][1]) + yr
                if h >= height:
                    continue
                index = (h * width + w) * 4
                if PIX_color[index + 3] != 0:
                    PIX_color[index + 3] = -1
        num = height * width * 4
        for j in range(0, num, 4):
            if PIX_color[j + 3] != -1:
                PIX_color[j + 3] = 0
            else:
                PIX_color[j + 0] = 255
                PIX_color[j + 1] = 255
                PIX_color[j + 2] = 255
                PIX_color[j + 3] = PIX_t[2][j + 3]
        PIX = (PIX_t[0], PIX_t[1], tuple(PIX_color))
        if (10 * ts + i * _FD >= 10 * (_start + _elapk + _k + 5)) or (10 * ts + (i + 1) * _FD < 10 * (_start + _elapk - 5)):
            tcas_main(TCAS_BUF, PIX, 10 * ts + i * _FD, 10 * ts + (i + 1) * _FD, dx + rp[i + offset][0], dy + rp[i + offset][1], 0)
        ass_main(ASS_BUF, SubL(Start = ts + i * _FD / 10, End = ts + (i + 1) * _FD / 10, Layer = 1), pos(_x + rp[i + offset][0], _y + rp[i + offset][1]) + bord(3) + blur(2), _txt)
        ass_main(ASS_BUF, SubL(Start = ts + i * _FD / 10, End = ts + (i + 1) * _FD / 10, Layer = 2), pos(_x + rp[i + offset][0], _y + rp[i + offset][1]) + bord(1) + color3('000000'), _txt)
        ass_main(ASS_BUF, SubL(Start = ts + i * _FD / 10, End = ts + (i + 1) * _FD / 10, Layer = 3), pos(_x + rp[i + offset][0], _y + rp[i + offset][1]) + bord(0), _txt)
    # 特效表现效果
    C3 = '0000FF'
    EFT1 = animation2(0, 4 * _k + 50, 1.3, fs(55) + blur(6) + bord(6) + color3(C3))
    EFT2 = animation1(0, 2 * _k + 50, color1('FFFFFF')) + alpha1(0) + be(1)
    ass_main(ASS_BUF, SubL(Start = _start + _elapk - 5, End = _start + _elapk + _k / 2, Layer = 6), pos(_x, _y) + EFT1 + EFT2, _txt)
    EFT1 = fs(55) + blur(6) + bord(6) + color3(C3) + animation2(_k + 50, 5 * _k + 50, 0.8, fs(_Fs) + blur(0) + bord(0) + color3('FF8A15'))
    EFT2 = color1('FFFFFF') + animation1(0, 3 * _k, color1(C3)) + animation1(3 * _k, 5 * _k + 50, color1('FF8A15')) + alpha1(0) + be(1)
    ass_main(ASS_BUF, SubL(Start = _start + _elapk + _k / 2, End = _start + _elapk + _k + 5, Layer = 6), pos(_x, _y) + EFT1 + EFT2, _txt)
    EFT = color1('FFFFFF') + alpha3(255) + be(1) + animation2(0, 4 * _k + 50, 1.3, fs(53))
    ass_main(ASS_BUF, SubL(Start = _start + _elapk - 5, End = _start + _elapk + _k * 6 / 10 + 5, Layer = 6), pos(_x, _y) + EFT, _txt)
    EFT = color1('FFFFFF') + alpha3(255) + be(1) + fs(53) + animation2(0, 4 * _k, 0.8, fs(_Fs))
    ass_main(ASS_BUF, SubL(Start = _start + _elapk + _k * 6 / 10 + 5, End = _start + _elapk + _k + 5, Layer = 6), pos(_x, _y) + EFT, _txt)
    EFT1 = animation2(0, 4 * _k + 50, 1.3, fs(50) + blur(6) + bord(6) + color3(C3))
    EFT2 = animation1(0, 2 * _k + 50, color1('FFFFFF')) + be(1) + alpha1(0)
    ass_main(ASS_BUF, SubL(Start = _start + _elapk - 5, End = _start + _elapk + _k / 2, Layer = 7), pos(_x, _y) + EFT1 + EFT2, _txt)
    EFT1 = fs(50) + blur(6) + bord(6) + color3(C3) + animation2(_k + 50, 5 * _k + 50, 0.8, fs(_Fs) + blur(0) + bord(0) + color3('FF8A15'))
    EFT2 = color1('FFFFFF') + animation1(0, 3 * _k, color1(C3)) + animation1(3 * _k, 5 * _k + 50, color1('FF8A15')) + be(1) + alpha1(0)
    ass_main(ASS_BUF, SubL(Start = _start + _elapk + _k / 2, End = _start + _elapk + _k + 5, Layer = 7), pos(_x, _y) + EFT1 + EFT2, _txt)
    EFT = color1('FFFFFF') + alpha3(255) + be(1) + animation2(0, 4 * _k + 50, 1.3, fs(48))
    ass_main(ASS_BUF, SubL(Start = _start + _elapk - 5, End = _start + _elapk + _k * 6 / 10 + 5, Layer = 7), pos(_x, _y) + EFT, _txt)
    EFT = color1('FFFFFF') + alpha3(255) + be(1) + fs(48) + animation2(6 * _k + 100, 10 * _k + 100, 0.8, fs(_Fs))
    ass_main(ASS_BUF, SubL(Start = _start + _elapk + _k * 6 / 10 + 5, End = _start + _elapk + _k + 5, Layer = 7), pos(_x, _y) + EFT, _txt)
    # 出场效果
    offset += count
    num = int(400 / _FD)
    te = ts + count * _FD / 10
    for i in range(num):
        ass_main(ASS_BUF, SubL(Start = te + i * _FD / 10, End = te + (i + 1) * _FD / 10, Layer = 1), pos(_x + rp[i + offset][0], _y + rp[i + offset][1]) + alpha(255 * i / num) + bord(3) + blur(2), _txt)
        ass_main(ASS_BUF, SubL(Start = te + i * _FD / 10, End = te + (i + 1) * _FD / 10, Layer = 2), pos(_x + rp[i + offset][0], _y + rp[i + offset][1]) + alpha(255 * i / num) + bord(1) + color3('000000'), _txt)
        ass_main(ASS_BUF, SubL(Start = te + i * _FD / 10, End = te + (i + 1) * _FD / 10, Layer = 3), pos(_x + rp[i + offset][0], _y + rp[i + offset][1]) + alpha(255 * i / num) + bord(0), _txt)
    ##### 将结果返回给tcax进行处理 #####
    return (ASS_BUF, TCAS_BUF)
 文件名为: [J]028_Nurarihyon_OP.mkv
 
 
 
 
 | 
 
2
查看全部评分
 |