回覆列表
  • 1 # 使用者2050514729270

    time是指第幾秒(注意單位是秒哦~),time*n就是現在時間(第幾秒)乘以n比如現在是1s,time*200在1s這個地方讓你加表示式的那個值=1×200,也就是200,其實就相當於一個隨著時間單調遞增的線性函式。ae表示式是預設將最後一個值賦給你需要加表示式的值(比如position,rotation等),這一點感覺和程式設計有很大不同。分享一個自己寫的小球彈跳的表示式吧,本來是作業的,然後我自己又寫了一個解釋:e = .5; 恢復係數g = 1687.5; 加速度t_0 = 20/25; 第一次下落的時間v_0 = g*t_0; 第一次著地的速度n_max = 10; 最多迴圈次數——重點!不加這個要死迴圈,至少本寶寶是這樣,差點把我的aep檔案全毀了,當然不知道是不是原本是我的問題,若有大神,請指正。n = 0; 初始化迴圈次數(不知道AE這麼C語言風格的表示式是不是要初始化,大一的課程似乎也就記得起這麼一點點了)floor = 540; 地面的位置(小球著地的位置)if(time >= t_0){ 第一次掉落的時候,並不進入迴圈,因為只有下落的過程,這裡特別注意的是AE中time是一個神奇的東西,本寶寶是感覺三觀都被它重新整理了一次,因為它本身就是一個在不斷變化的引數——即當前的時間(單位s),當time>=t_0時,也就是說這個大括號之內的所有都是在考慮刨去第一次下落過程之後的過程 y = 0; 小球的y軸位置 t_next = 0; 下一次彈跳的時刻(即本次彈跳結束的時刻) t_dur = 0; 每次彈跳在空中停留的時間 t_cur = 0; 本次彈跳開始的時刻 t = time - t_0 time減去t_0,即刨去第一次下落這個過程的當前時間 v = v_0 ; 速度,第一次觸地while(t_next <= t &&n <= n_max){ 如果當前時間大於這一次觸地的時刻,那麼就進入將本次觸地的時間傳遞給t_cur(就是再定義一個變數記住本次觸地的時間),迴圈計算彈起後的速度(也就是再次落地的速度)、下一次觸地的時間、下一次在空中停留的時間——難以理解的一點估計就是t其實是在不斷增加的,感覺就是影片本身是預設在放映,所以時間是一個必要的變數。 v *= e 彈起的速度,要乘以恢復係數 t_dur = (2*v)/g 空中停留的時間 t_cur = t_next 讓t_cur記住t_next t_next += t_dur 因為t_next 這一步就失憶了 n ++ } if(n <= n_max){ d_t = t - t_cur 這一次彈起來的時候,在空中的時刻——相對於彈起瞬間來說 y =floor - d_t*(v - (1/2)*g*d_t) 物理公式,計算球的座標 }else{ 如果n_max 次迴圈結束了,不加此else,y又變成了預設的0,但是我希望它最後停在地上 y =floor } }else{這個else裡面的內容,是時間小於t_0時發生的故事——也就是球球掉下來的哪一個過程的內容 y = (1/2)*g*time*time 物理公式}value + [0, y]position是一個二維的變數,value為當前值,y事實上為time的函式,函式式由以上算出,然後這最後加的一行所代表的值也就是position的值了——AE只認最後一行

  • 中秋節和大豐收的關聯?
  • 替魯濱遜保管錢的老寡婦發生了什麼事?