正文

游戏数学(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类有两个构造函数,它们都调用了Construct方法。构造函数允许用户指定补间函数的类型,或者使用默认的随时间线性变化。补间函数通过TweenFunction委托定义。TweenFunction委托在这个类中的唯一实现是Linear函数。在默认构造函数中可以看到它的用法。

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

Construct方法记录了补间的初始值、最终值和执行补间操作的时间。也可以传入一个补间函数来确定值随时间如何变化。Construct方法可记录这些值,并计算出从初始值到最终值之间的距离。该距离将被传递给相关的补间函数。

Tween对象将在每一帧中更新,经过的时间在每一次更新调用中将被累加。这样Tween对象就知道补间的进度。补间函数的委托会修改补间的当前值。最后,更新函数会检查补间是否结束,如果结束,则将结束标记设为true。

如果只有一个线性函数,Tween类就没有那么有价值了。下面列出了其他一些可以添加到Tween类的函数,图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 © 读书网 www.dushu.com 2005-2020, All Rights Reserved.
鄂ICP备15019699号 鄂公网安备 42010302001612号