数字滚动变化,数值a变化到数值b

public class TextNumberScrol : MonoBehaviour
{
    private Sequence mScoreSequence;
    private Action _callBack;

    /// <summary>
    /// 数值a变化到数值b
    /// </summary>
    /// <param name="gText">文本对象</param>
    /// <param name="delayTime">设置延时</param>
    /// <param name="mOldScore">初始数值</param>
    /// <param name="newScore">最终值</param>
    /// <param name="time">所需时间</param>
    /// <param name="callBack">完成回调</param>
    public TextNumberScrol(Text gText, float delayTime, int mOldScore, int newScore, float time, Action callBack)
    {
        _callBack = callBack;
        mScoreSequence = DOTween.Sequence();
        mScoreSequence.SetAutoKill(false);

        mScoreSequence.Append(DOTween.To(delegate (float value)
        {
            //向下取整
            var temp = Math.Floor(value);
            //向Text组件赋值
            gText.text = temp.ToString();
        }, mOldScore, newScore, 0.4f)).OnComplete(Finish).SetDelay(delayTime);

        //将更新后的值记录下来, 用于下一次滚动动画
        mOldScore = newScore;
    }
    public TextNumberScrol(Text gText, float delayTime, float mOldScore, float newScore, float time, Action callBack)
    {
        _callBack = callBack;
        mScoreSequence = DOTween.Sequence();
        mScoreSequence.SetAutoKill(false);

        mScoreSequence.Append(DOTween.To(delegate (float value)
        {
            //向Text组件赋值,保留小数点后两位
            var temp = ToFixed(value, 2);
            gText.text = string.Format("+{0}%", temp);
        }, mOldScore, newScore, 0.4f)).OnComplete(()=>
        {
            //结束时修正最终显示值
            gText.text = string.Format("+{0}%", newScore);
            Finish();
        }).SetDelay(delayTime);

        //将更新后的值记录下来, 用于下一次滚动动画
        mOldScore = newScore;
    }

    /// <summary>
    /// 完成回调
    /// </summary>
    private void Finish()
    {
        _callBack?.Invoke();
    }

    /// <summary> 
    /// 将小数值按指定的小数位数截断 
    /// </summary> 
    /// <param name="d">要截断的小数</param> 
    /// <param name="s">小数位数,s大于等于0,小于等于28</param> 
    /// <returns></returns> 
    public double ToFixed(double d, int s)
    {
        double sp = Convert.ToDouble(Math.Pow(10, s));

        if (d < 0)
        {
            return Math.Truncate(d) + Math.Ceiling((d - Math.Truncate(d)) * sp) / sp;
        }
        else
        {
            return Math.Truncate(d) + Math.Floor((d - Math.Truncate(d)) * sp) / sp;
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值