1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | /*前置工作:在AE新增一個文字圖層,在這個文字圖層新增兩個Slider Control, 取名Cursor和Flash_Bar_Freq,分別用來控制現在打到第幾個字, 以及打字的那條直線閃爍的頻率,最後在文字圖層的Source Text處新增以下表達式*/ /*演算法說明:依序讀取注音的字串,並在讀取到數字的時候依據數字大小讀取相對應的漢字數目*/ //這是注音字串,在想要轉換漢字的地方打下前面部分代表幾個漢字,像「ㄨㄛˇㄒ2」表示「ㄨㄛˇㄒ」是2個字 zhuYin = "ㄨㄛˇ1ㄒㄏㄨㄢ2ㄇㄛˋㄇㄛˋ2ㄎㄢˋㄋㄧˇㄘㄜㄌㄧㄢ4ㄑㄧㄠㄑㄧㄠ2ㄍㄣㄗㄞ2ㄋㄉㄏㄇ5ㄕㄡㄒ2ㄋㄉ2ㄗㄐㄧ2ㄋㄉ2ㄒㄏㄠˋ2ㄏㄜ1ㄋㄧㄋㄚ2ㄨㄖㄉㄜ˙3ㄕㄥㄒㄧㄢˋ3ㄇㄛˋㄋㄧㄢˋ2ㄋㄉㄇㄧㄥˊㄗˋ4ㄧㄅㄧㄡㄧㄅ6ㄗㄞˋㄨㄛˇㄒㄓ4ㄕㄋㄇ3ㄧㄠˋㄧㄢˇ3ㄨㄛˇㄒㄍㄨㄢ3ㄊㄊ2ㄎㄠˋㄋㄐㄧㄣˋㄉㄧㄢˇ4ㄑㄧㄥㄑㄧㄥ2ㄔㄨㄆㄥ2ㄋㄉㄕˋㄒㄧㄢˋ5ㄍㄒㄋ3ㄔㄨㄒㄧㄢ2ㄗㄞˋㄨㄛˇ2ㄗㄨㄟˋㄇㄟˇㄉ3ㄋㄧㄢˊㄏㄨㄚˊㄌㄇ5ㄑㄩˋ1ㄧㄥˊㄐㄧㄝ2ㄉㄧㄥˋㄍㄜˊㄉ3ㄇㄟˇ1ㄕㄨㄣˋㄐㄧㄢ3ㄓㄜˋ1ㄒㄉ2ㄨㄣㄖㄜˋ2ㄍㄐㄩㄝ2ㄉㄏㄨㄟˋㄕ3ㄏㄊ2"; //這是漢字字串,也是最後會顯示出來的文字內容 hanZi = "我喜歡默默看你側臉悄悄跟在你的後面\n熟悉你的字跡你的喜好和你那溫柔的聲線\n默念你的名字一遍又一遍\n在我心中是那麼耀眼\n我習慣偷偷靠你近點輕輕觸碰你的視線\n感謝你出現在我最美的年華裡面\n去迎接定格的每瞬間\n這心動溫熱感覺都會是很甜\n"; //這是我們用來控制目前打到哪裡的Slider Control(取名為Cursor那個), //這邊用Math.floor()先把它轉為整數比較不會出問題 nowN = Math.floor(effect("Cursor")("Slider").value); //控制不要讓這個數字比我們的注音字串長度長了,不然會出錯 if(nowN > zhuYin.length){ nowN = zhuYin.length; } //新增一個結果的空字串,也是我們最後真正要顯示的字串 result = ""; //宣告一些變數 hanZiNum = 0; zhuYinStart = 0; zhuYinLength = 0; //開始填我們的result字串 if(nowN > 0){ //如果現在打了>0個字,<=0就直接讓它顯示空字串,什麼都不用加 //開始從注音字串的第一個字讀到目前Cursor的位置 for(i = 0; i < nowN; i++){ if(!isNaN(parseInt(zhuYin[i]))){ //如果讀取注音字串的時候遇到了一個數字 hanZiNum += parseInt(zhuYin[i]); //把那個數字加在要顯示的漢字數目上 zhuYinLength = 0; //把目前打的注音數目歸零(因為已經轉換成漢字的注音就不會再顯示了) zhuYinStart = i+1; //要顯示的注音就從現在讀到的數字的下一個開始 }else{ //如果讀取注音字串的很正常的遇到了不是數字的字元(注音) zhuYinLength++; //要顯示的注音長度+1 } } } //來填結果的字串 result = ((hanZiNum>0)? hanZi.substring(0,hanZiNum):"") + ((zhuYinLength>0)? zhuYin.substring(zhuYinStart, zhuYinStart+zhuYinLength):""); //然後加上最後閃爍的游標 bool_F = (time*effect("Flash_Bar_Freq")("Slider")%1)>0.5; if(bool_F || effect("Cursor")("Slider").speed>0){ result += "|"; }else{ result += " "; } //最後跟AE說我要顯示這個字串 result; |
Direct link: https://paste.plurk.com/show/2431693