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;