正文

游戲數(shù)學(xué)(29)

精通C#游戲編程 作者:(英)斯庫勒


 

_tweenF = tweenF;

}

public void Update(double elapsedTime)

{

_totalTimePassed += elapsedTime;

_current = _tweenF(_totalTimePassed, _original, _distance,

_totalDuration);

if (_totalTimePassed > _totalDuration)

{

_current = _original + _distance;

_finished = true;

}

}

}

Tween類有兩個構(gòu)造函數(shù),它們都調(diào)用了Construct方法。構(gòu)造函數(shù)允許用戶指定補間函數(shù)的類型,或者使用默認(rèn)的隨時間線性變化。補間函數(shù)通過TweenFunction委托定義。TweenFunction委托在這個類中的唯一實現(xiàn)是Linear函數(shù)。在默認(rèn)構(gòu)造函數(shù)中可以看到它的用法。

Construct(start, end, time, Tween.Linear);

Construct方法記錄了補間的初始值、最終值和執(zhí)行補間操作的時間。也可以傳入一個補間函數(shù)來確定值隨時間如何變化。Construct方法可記錄這些值,并計算出從初始值到最終值之間的距離。該距離將被傳遞給相關(guān)的補間函數(shù)。

Tween對象將在每一幀中更新,經(jīng)過的時間在每一次更新調(diào)用中將被累加。這樣Tween對象就知道補間的進度。補間函數(shù)的委托會修改補間的當(dāng)前值。最后,更新函數(shù)會檢查補間是否結(jié)束,如果結(jié)束,則將結(jié)束標(biāo)記設(shè)為true。

如果只有一個線性函數(shù),Tween類就沒有那么有價值了。下面列出了其他一些可以添加到Tween類的函數(shù),圖8-20中也顯示了它們。

public static double EaseOutExpo(double timePassed, double start, double

distance, double duration)

{

if (timePassed == duration)

{

return start + distance;

}

return distance * (-Math.Pow(2, -10 * timePassed / duration) + 1) + start;

}

public static double EaseInExpo(double timePassed, double start, double

distance, double duration)

{

if (timePassed == 0)

{

return start;

}

else

{

return distance * Math.Pow(2, 10 * (timePassed / duration - 1)) + start;

}

}

public static double EaseOutCirc(double timePassed, double start, double

distance, double duration)

{

return distance * Math.Sqrt(1 - (timePassed = timePassed / duration - 1) *

timePassed) + start;

}

public static double EaseInCirc(double timePassed, double start, double

distance, double duration)

{

return -distance * (Math.Sqrt(1 - (timePassed /= duration) * timePassed)

- 1) + start;

}


上一章目錄下一章

Copyright ? 讀書網(wǎng) m.ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網(wǎng)安備 42010302001612號