正文

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

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


 

_tweenF = tweenF;

}

public void Update(double elapsedTime)

{

_totalTimePassed += elapsedTime;

_current = _tweenF(_totalTimePassed, _original, _distance,

_totalDuration);

if (_totalTimePassed > _totalDuration)

{

_current = _original + _distance;

_finished = true;

}

}

}

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

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

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

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

如果只有一個(gè)線性函數(shù),Tween類(lèi)就沒(méi)有那么有價(jià)值了。下面列出了其他一些可以添加到Tween類(lèi)的函數(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 ? 讀書(shū)網(wǎng) ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號(hào) 鄂公網(wǎng)安備 42010302001612號(hào)