2016-12-31 57 views
1

補間是一個視頻編輯術語,用於描述運動的易用性。例如,對於電梯,當電梯達到所需樓層時,電梯不會全速行駛並停下。它知道它在哪一層,它要去哪個樓層,需要多長時間才能到達那裏。然後它使用該數據來平滑其運動。輕鬆移動,編程補間,C++

我希望能夠通過使用補間來爲我的項目編程這個平滑的動作。

如何做到這一點的方法奠定了在http://robertpenner.com/easing/penner_chapter7_tweening.pdf

具體看pg207-211

本指南解釋了什麼是補間,然後顯示在動作腳本代碼。說實話,我覺得有點愚蠢,因爲我嘗試過使用提供的例子,但似乎無法用另一種語言(如C++,java,javascript或lua)複製它。

我不希望使用包或插件來補間代碼,我想學習如何實際編碼補間功能。所以如果有更好的理解能力或編程技巧的人認爲他們理解,那麼我會非常感謝他的解釋。

樣動作腳本函數...

Math.easeInQuad = function (t, b, c, d) { 
    return c*(t/=d)*t + b; 
}; 

Math.easeOutQuad = function (t, b, c, d) { 
    return -c * (t/=d)*(t-2) + b; 
}; 

Math.easeInOutQuad = function (t, b, c, d) { 
    if ((t/=d/2) < 1) 
     return c/2*t*t + b; 
    return -c/2 * ((--t)*(t-2) - 1) + b; 
}; 
+1

你的問題是什麼? –

+0

我編寫了我自己的補間的方式,閱讀我的類ru.delimiter.math.TweenAlot在http://www.delimiter.ru/as/ – Organis

回答

2

在AS3一個適當的補間函數接受Number 6個參數與最後兩個參數爲0違約應該解釋參數如下:

  • 第一個參數是主參數,它填充了從0到補間持續時間的值;
  • 第二個參數是當第一個參數爲零時嘗試補間的參數的值;
  • 第三個參數是tweening參數預期分配的值的間隔大小;
  • 第四個參數是以用戶提供的任何單位的持續時間,因此是一個數字而不是一個整數;
  • 第五和第六個參數是可選的,並不在AS3內置補間庫中使用,但可用於修改在函數內完成的插值(如果在其他位置自定義使用)。

預期結果是second(second+third)參數之間的值,或與bb+c之間其的t, b, c, d, a, p規範名稱。

您可以使用一個簡單的算法,這樣繪製函數的圖形:

function graph(f:Function,w:Number,h:Number):Shape { 
    // returns a shape with black on white graph drawn within a rectangle of given dimensions 
    var s:Shape=new Shape(); 
    s.graphics.lineStyle(0); // black 
    s.graphics.moveTo(0,h); // lower left corner 
    for (var i:int=0;i<w;i++) { 
     s.graphics.lineTo(i,f(i,h,-1*h,w)); 
    } 
    return s; 
} 

的C++說起,例如easeInQuad應編程這樣的(如果我沒惹了C++的語法):

double easeInQuad(double t, double b, double c, double d) { 
    double td=t/d; 
    return b+c*td*td; 
}