コード例 #1
0
        /// <summary>
        /// 创建一个动画字符。每个字符具有的字体,字体样式,以及动画都有可能不同。
        /// </summary>
        /// <param name="index"></param>
        /// <param name="character"></param>
        /// <param name="g"></param>
        /// <returns></returns>
        public static AnimationChar CreatAnimationChar(int index, string character, Graphics g)
        {
            AnimationChar animChar = new AnimationChar(character);

            animChar.Font = GetFontByIndex(index);
            animChar.Size = g.MeasureString(character, animChar.Font, new Point(0, 0), StringFormat.GenericTypographic);
            return(animChar);
        }
コード例 #2
0
        private void CreateAnimation(SlideInAnimation.SlieInDirection direction, AnimationChar animChar, float finalPosX)
        {
            //计算与字体相关的参数
            int ascent   = animChar.Font.FontFamily.GetCellAscent(animChar.Font.Style);
            int descent  = animChar.Font.FontFamily.GetCellDescent(animChar.Font.Style);
            int emHeight = animChar.Font.FontFamily.GetEmHeight(animChar.Font.Style);

            float ascentF  = ascent * animChar.Font.Size / emHeight;
            float descentF = descent * animChar.Font.Size / emHeight;

            //计算绘制文字的开始位置
            float height = ascentF + descentF;
            float locY   = (AnimationConfig.Height - height) / 2;

            switch (direction)
            {
            case SlieInDirection.RIGHT:
                animChar.SetLocation(AnimationConfig.Width, locY);
                animChar.CalcPath();    //计算字体的路径
                animChar.Animation = AnimationUtil.CreatePostionAnimation(AnimationConfig.Width, finalPosX, locY, locY);
                break;

            case SlieInDirection.LEFT:
                int width = Convert.ToInt32(animChar.Size.Width);
                animChar.SetLocation(-width, locY);
                animChar.CalcPath();
                animChar.Animation = AnimationUtil.CreatePostionAnimation(-width, finalPosX, locY, locY);
                break;

            case SlieInDirection.BOTTOM:
                animChar.SetLocation(finalPosX, AnimationConfig.Height);
                animChar.CalcPath();
                animChar.Animation = AnimationUtil.CreatePostionAnimation(finalPosX, finalPosX, AnimationConfig.Height, locY);
                break;

            case SlieInDirection.TOP:
                animChar.SetLocation(finalPosX, -height);
                animChar.CalcPath();
                animChar.Animation = AnimationUtil.CreatePostionAnimation(finalPosX, finalPosX, -height, locY);
                break;

            case SlieInDirection.VERBATIM:
                animChar.SetLocation(finalPosX, AnimationConfig.Height);
                animChar.CalcPath();
                animChar.Animation = AnimationUtil.CreateTranslateAnimation(finalPosX, finalPosX, AnimationConfig.Height, locY);
                break;

            default:                 //SlieInDirection.RIGHT
                animChar.SetLocation(AnimationConfig.Width, locY);
                animChar.CalcPath(); //计算字体的路径
                animChar.Animation = AnimationUtil.CreatePostionAnimation(AnimationConfig.Width, finalPosX, locY, locY);
                break;
            }
        }
コード例 #3
0
        /// <summary>
        /// 文字由向左进入动画
        /// </summary>
        /// <param name="animChar"></param>
        public static void CreateRightInAnimation(AnimationChar animChar, float toX)
        {
            //计算与字体相关的参数
            int ascent   = animChar.Font.FontFamily.GetCellAscent(animChar.Font.Style);
            int descent  = animChar.Font.FontFamily.GetCellDescent(animChar.Font.Style);
            int emHeight = animChar.Font.FontFamily.GetEmHeight(animChar.Font.Style);

            float ascentF  = ascent * animChar.Font.Size / emHeight;
            float descentF = descent * animChar.Font.Size / emHeight;

            //计算绘制文字的开始位置
            float locY = (AnimationConfig.Height - (ascentF + descentF)) / 2;

            animChar.SetLocation(AnimationConfig.Width, locY);
            animChar.CalcPath();//计算字体的路径
            animChar.Animation = CreatePostionAnimation(AnimationConfig.Width, toX, locY, locY);
        }
コード例 #4
0
        public void CreateSlideInAnimation(List <LinkedList <AnimationChar> > screens, SlieInDirection direction)
        {
            screens.Clear();
            LinkedList <AnimationChar> linkedChars = new LinkedList <AnimationChar>();//一屏中显示的字符

            string text     = AnimationConfig.Text;
            int    textSize = text.Length;

            int length    = 0; //字符显示的长度
            int charWidth = 0; //单个字符的宽度

            if (direction == SlieInDirection.LEFT)
            {
                length = AnimationConfig.Width;
                for (int i = textSize - 1; i >= 0; i--)
                {
                    string        character = text.Substring(i, 1);
                    AnimationChar animChar  = AnimationUtil.CreatAnimationChar(i, character, g);
                    charWidth = Convert.ToInt32(animChar.Size.Width);

                    if ((length - charWidth) < 0) //需要分屏
                    {
                        length = AnimationConfig.Width;
                        if (linkedChars.Count > 0)
                        {
                            screens.Add(linkedChars);
                            linkedChars = new LinkedList <AnimationChar>();//创建新的列表
                        }
                    }

                    CreateAnimation(direction, animChar, length - charWidth);
                    length -= (charWidth + AnimationConfig.Space);
                    LinkedListNode <AnimationChar> node = new LinkedListNode <AnimationChar>(animChar);
                    linkedChars.AddLast(node);
                }
            }
            else
            {
                for (int i = 0; i < textSize; i++)
                {
                    string        character = text.Substring(i, 1);
                    AnimationChar animChar  = AnimationUtil.CreatAnimationChar(i, character, g);
                    charWidth = Convert.ToInt32(animChar.Size.Width);
                    if (length + charWidth > AnimationConfig.Width) //需要分屏
                    {
                        length = 0;
                        if (linkedChars.Count > 0)
                        {
                            screens.Add(linkedChars);
                            linkedChars = new LinkedList <AnimationChar>();//创建新的列表
                        }
                    }

                    CreateAnimation(direction, animChar, length);
                    length += (charWidth + AnimationConfig.Space);
                    LinkedListNode <AnimationChar> node = new LinkedListNode <AnimationChar>(animChar);
                    linkedChars.AddLast(node);
                }
            }

            if (linkedChars.Count > 0)
            {
                screens.Add(linkedChars);
            }
        }