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

 找回密码
 新人加入
查看: 7219|回复: 17
打印 上一主题 下一主题

[其他代码] 整行效果的寫法 [复制链接]

Administrator

Shanzhai Pro.

Rank: 7Rank: 7Rank: 7

跳转到指定楼层
楼主
发表于 2012-8-28 17:16:51 |只看该作者 |倒序浏览
游風要的例子 填完坑 差點忘了
預覽見ass    test.ass (13.31 KB, 下载次数: 3971)

不是怎麼建議這麼寫 效果也相對很有局限性
如果想實現同樣的效果 還是建議分字算距離
不過作為文字列操作的方法 倒是可以借鑒一下
一般來說這種自由度比較高的寫法 用user函數來寫
不過自從囧過滑頭鬼ED後,我發現main其實更方便
  1. from tcaxPy import *

  2. def tcaxPy_Init():
  3.     global _KTF
  4.     global _TXTF
  5.     global _SKF
  6.     _KTF          = GetVal(val_KarTime)
  7.     _TXTF         = GetVal(val_Text)
  8.     _SKF          = GetVal(val_KarTimeDiff)

  9. def tcaxPy_Main(_i, _j, _n, _BT, _ET, _SK, _KT, _X, _Y, _A, _TXT):

  10.     ASS_BUF  = []                # 保存ASS特效

  11.     if _j== 0:
  12.         EFT =  ''.join( '{\\r'+t(_SKF[_i][k]*10,_SKF[_i][k]*10+15,fsc(180,180))+t(_SKF[_i][k]*10+100,(_SKF[_i][k]+_KTF[_i][k])*10,fsc(100,100))+ '}'+_TXTF[_i][k]  for k in range(_n))
  13.         ass_main(ASS_BUF, SubL(_BT, _ET),an(2)+pos(640,360)+fad(150,150),EFT)

  14.     return (ASS_BUF,None)
复制代码
1

查看全部评分

Rank: 4

沙发
发表于 2012-8-28 17:18:30 |只看该作者
感谢 sai大

Rank: 4

板凳
发表于 2012-8-28 20:13:05 |只看该作者
很强大

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

地板
发表于 2012-8-28 21:44:17 |只看该作者

Rank: 5Rank: 5

5#
发表于 2013-1-29 21:03:50 |只看该作者
忽然明白了什么叫‘整行特效’...但是EFT那一段真心...一个字没懂...

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

6#
发表于 2013-1-29 21:52:23 |只看该作者
oloroso 发表于 2013-1-29 21:03
忽然明白了什么叫‘整行特效’...但是EFT那一段真心...一个字没懂...

Python對字符串的處理...
需要對Python有個大概的了解.

在這個基礎上, 可以對腳本進行"調試", 即:
在17行上面插入
print(EFT)
Pause()
兩行代碼.


Rank: 5Rank: 5

7#
发表于 2013-1-31 22:10:15 |只看该作者
本帖最后由 oloroso 于 2013-1-31 22:16 编辑

谢谢牛奶..按照泥的‘调试’...输出了这堆东西... EFT调试.jpg
...觉得挺神奇的,谢谢。

ps: 有点诧异,其实还是有点不懂...(蹦~

Moderator

疯子

Rank: 5Rank: 5

8#
发表于 2013-1-31 23:29:39 |只看该作者
oloroso 发表于 2013-1-31 22:10
谢谢牛奶..按照泥的‘调试’...输出了这堆东西...
...觉得挺神奇的,谢谢。

那就是个暂停看输出的东西,有时候有些地方弄不明白,就可以看看输出是什么

Rank: 4

9#
发表于 2013-9-18 20:14:03 |只看该作者
本帖最后由 yyxxlc 于 2013-9-18 20:19 编辑

sai大!我想问下~
  1. EFT =  ''.join( '{\\r'+t(_SKF[_i][k]*10,_SKF[_i][k]*10+15,fsc(180,180))+t(_SKF[_i][k]*10+100,(_SKF[_i][k]+_KTF[_i][k])*10,fsc(100,100))+ '}'+_TXTF[_i][k]  for k in range(_n))
复制代码
为什么不可以写成:
  1. for k in range(_n) :
  2.    EFT= ''.join( '{\\r'+t(_SKF[_i][k]*10,_SKF[_i][k]*10+15,fsc(180,180))+t(_SKF[_i][k]*10+100,(_SKF[_i][k]+_KTF[_i][k])*10,fsc(100,100))+ '}'+_TXTF[_i][k])
复制代码
我试了下把循环放在上面,但是输出来的结果的确不太正常,今天我几乎翻了python语法一天了,都找不到这种把循环写在后面的情况(也许是看漏了吧  但是1000多页的pdf  全都是字母 我头疼T_T),我想问问您  这种放在后面的话和放在前面理论上的区别是什么 ,那个我时候中间加 print和pause了 但是因为输出的都是结果 我、我总结不出来.....所以能不能麻烦您小小的给我讲下啊~

因为发现输出的结果只有每一句都只有最后一个字了,于是我当时把它改成了:
  1. a=[]
  2. for k in range(_n):
  3.     EFT= ''.join( '{\\r'+t(_SKF[_i][k]*10,_SKF[_i][k]*10+15,fsc(180,180))+t(_SKF[_i][k]*10+100,(_SKF[_i][k]+_KTF[_i][k])*10,fsc(100,100))+ '}'+_TXTF[_i][k])
  4.     a.append(EFT)
  5.     ass_main(ASS_BUF, SubL(_BT, _ET),an(2)+pos(640,360)+fad(150,150),a)
复制代码
虽然动作是对的,但是文字全变成[A,B,C,D,....]这种诡异的样子了。

Administrator

Shanzhai Pro.

Rank: 7Rank: 7Rank: 7

10#
发表于 2013-9-18 22:18:03 |只看该作者
yyxxlc 发表于 2013-9-18 20:14
sai大!我想问下~为什么不可以写成:我试了下把循环放在上面,但是输出来的结果的确不太正常,今天我几乎翻 ...

放前面放後面本質上沒什麽區別 只是我懶。。。
另外文本好長 我也懶得讀(w
總之for寫前面的話 我一般是這麼寫
  1.         EFT = ''
  2.         for k in range(_n):
  3.             EFT +=  '{\\r'+t(_SKF[_i][k]*10,_SKF[_i][k]*10+15,fsc(180,180))+t(_SKF[_i][k]*10+100,(_SKF[_i][k]+_KTF[_i][k])*10,fsc(100,100))+ '}'+_TXTF[_i][k]
  4.         ass_main(ASS_BUF, SubL(_BT, _ET),an(2)+pos(640,360)+fad(150,150),EFT)
复制代码
感覺沒什麼好深究只是一個寫法
找了一篇關於這個的 可以參考
http://descriptor.blogspot.jp/2008/11/python-idiom-join.html

Rank: 4

11#
发表于 2013-9-18 22:35:02 |只看该作者
saiyaku 发表于 2013-9-18 22:18
放前面放後面本質上沒什麽區別 只是我懶。。。
另外文本好長 我也懶得讀(w
總之for寫前面的話 我一般是 ...

谢、谢谢!  (PS:网页打不开泪)

Administrator

Shanzhai Pro.

Rank: 7Rank: 7Rank: 7

12#
发表于 2013-9-18 22:47:28 |只看该作者
那轉一下吧
原文:http://descriptor.blogspot.jp/2008/11/python-idiom-join.html


如果要將一個 list 中的所有字串接起來 ,一般的做法是
  1. items = ['red', 'blue', 'green', 'yellow']

  2. result = ''
  3. for s in items:
  4.     result += s
复制代码
Python 提供了一個更有效率的解法
  1. result = ''.join(items)
复制代码


如果字串中間要用逗號跟空白做分隔時,只要改成
  1. result = ', '.join(items)
复制代码

單括號內的字串就是隔開 items 元素的分隔物, 所以如果單括號內是空的,就表示沒有分隔物。
底下介紹上述技巧的應用
  1. colors = ['red', 'blue', 'green', 'yellow']
  2. print 'Choose', ', '.join(colors[:-1]), 'or', colors[-1]
复制代码

會傳回一個 list 包含 colors 內的所有元素除了最後一個, 而 colors[-1] 代表 colors 的最後一個元素。
所以執行上面的程式碼會顯示
  1. Choose red, blue, green or yellow
复制代码

假設在把字串接起來之前,想要對字串做一些處理, 比方說轉成大寫,一般的想法是
  1. items = ''
  2. for c in colors:
  3.      items += c.upper()
复制代码

有了 join 之後,也是一行就可完成
  1. items = ''.join(c.upper() for c in colors)
复制代码

眼尖的人會發現上面一行還用了 list comprehensions

PS. Python 的創造者 Guido van Rossum 寫過一篇 最佳化軼事 內容與字串相關,值得一讀。





Rank: 4

13#
发表于 2013-9-18 22:51:50 |只看该作者
saiyaku 发表于 2013-9-18 22:47
那轉一下吧
原文:http://descriptor.blogspot.jp/2008/11/python-idiom-join.html

sai大 果然是天使!  谢谢啦  中秋快乐~兔美君会一直保佑您的!

Administrator

Shanzhai Pro.

Rank: 7Rank: 7Rank: 7

14#
发表于 2013-9-18 23:13:00 |只看该作者
yyxxlc 发表于 2013-9-18 22:51
sai大 果然是天使!  谢谢啦  中秋快乐~兔美君会一直保佑您的!

兎美君是誰?

Rank: 4

15#
发表于 2013-9-19 01:19:28 |只看该作者
saiyaku 发表于 2013-9-18 23:13
兎美君是誰?

取自 名探侦だぞえ  うさみちゃん<------只是比较应了中秋节月亮上那只兔子的景~ 不过兔美约莫着是我最喜欢的兔子了(不要在意 我的重点是您是天使233)

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

16#
发表于 2013-9-23 21:12:46 |只看该作者
yyxxlc 发表于 2013-9-18 22:51
sai大 果然是天使!  谢谢啦  中秋快乐~兔美君会一直保佑您的!

中秋快乐

回家了几天, 没上论坛..

Rank: 4

17#
发表于 2013-9-23 21:16:09 |只看该作者
milkyjing 发表于 2013-9-23 21:12
中秋快乐

回家了几天, 没上论坛..

知道知道 您去相亲了~~~XD 话说不是有台风么 这么快就过啦  其实我就喜欢下雨天 莫名其妙的兴奋(放假的节奏) 可惜成都只有地震!

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

18#
发表于 2013-9-23 21:35:39 |只看该作者
yyxxlc 发表于 2013-9-23 21:16
知道知道 您去相亲了~~~XD 话说不是有台风么 这么快就过啦  其实我就喜欢下雨天 莫名其妙的兴奋(放假的 ...

节奏有点奇怪啊...

怎么都说我回去相亲了... 都怪小天,  让他499
您需要登录后才可以回帖 登录 | 新人加入

GitHub|TCAX 主页

GMT+8, 2024-11-27 11:23

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部
RealH