`
rcfalcon
  • 浏览: 227957 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

silverlight 动画自管理

    博客分类:
  • .NET
阅读更多

在GDE-X开发过程中需要对有的动画片段进行集中管理——可以归类到任务池结构。

 

一些动画需要启动后,按照一定的帧顺序展现,在展现完毕之后从画布中清除并释放所占用资源。

 

 silverlight中对于storyboard等提供completed事件,在动画结束的时候回调。

 

若这种动画会同时出现很多个,则回调的时候需要拿到具体其对应的那个释放函数。这样若单独维护其成员变量就行不通了。

 

如何让每个动画都在完成时找到自己对应的那个completed回调呢?用一个类封装一下就行了。 请看我封装的一个 AttackInfo 类,其功能为在某点出现一个攻击信息的动画,慢慢上浮并且消失。用于角色在受到攻击的时候头顶浮现数字或者其他信息。

 

效果如下图所示(Damage 1)

 

 

 

    /// <summary>
    /// 攻击信息类
    /// </summary>
    class AttackInfo
    {
        /// <summary>
        /// 构造函数,将自动启动动画
        /// </summary>
        /// <param name="rootCanvas">根画布</param>
        /// <param name="x">逻辑x</param>
        /// <param name="y">逻辑y</param>
        /// <param name="ID">角色ID</param>
        /// <param name="Info">内容</param>
        public AttackInfo(Canvas rootCanvas, int x, int y, int ID, string Info)
        {
            this.Info = Info;
            X = x;
            Y = y;
            RootCanvas = rootCanvas;
            this.ID = ID;
            this.Start();
        }

        private void Start()
        {
            int FromX = Battle.Transfer_X(X) + 6;
            int FromY = Battle.Transfer_Y(Y) - 40;
            int TargetY = FromY - 30;

            AttackInfoText = new TextBlock();
            AttackInfoText.Text = Info.ToString();
            AttackInfoText.FontSize = 20;
            AttackInfoText.Foreground = new SolidColorBrush(Colors.Red);
            RootCanvas.Children.Add(AttackInfoText);
            Canvas.SetLeft(AttackInfoText, FromX);
            Canvas.SetTop(AttackInfoText, FromY);
            Canvas.SetZIndex(AttackInfoText, Battle.AttackInfoTextOffsetBase);

            //创建动画
            DoubleAnimation MoveAnimY = new DoubleAnimation();
            MoveAnimY.From = FromY;
            MoveAnimY.To = TargetY;
            MoveAnimY.Duration = new Duration(new TimeSpan(0, 0, 0, 1, 0));

            DoubleAnimation AnimOpc = new DoubleAnimation();
            AnimOpc.From = 1;
            AnimOpc.To = 0;
            AnimOpc.Duration = new Duration(new TimeSpan(0, 0, 0, 1, 0));

            Storyboard Sb = new Storyboard();
            Sb.Duration = new Duration(new TimeSpan(0, 0, 0, 1, 0));
            Sb.AutoReverse = false;
            Sb.Children.Add(MoveAnimY);
            Sb.Children.Add(AnimOpc);

            Storyboard.SetTarget(MoveAnimY, AttackInfoText);
            Storyboard.SetTarget(AnimOpc, AttackInfoText);
            Storyboard.SetTargetProperty(MoveAnimY, new PropertyPath("(Canvas.Top)"));
            Storyboard.SetTargetProperty(AnimOpc, new PropertyPath("Opacity"));

            RootCanvas.Resources.Add("AttackInfoAnimation" + ID, Sb);
            Sb.Completed += new EventHandler(this.AttackInfoAnimationFinish);
            Sb.Begin();
        }

        /// <summary>
        /// 显示攻击信息动画结束
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void AttackInfoAnimationFinish(object sender, EventArgs e)
        {
            RootCanvas.Children.Remove(AttackInfoText);
            RootCanvas.Resources.Remove("AttackInfoAnimation" + ID);
        }

        private string Info;
        private int X { get; set; }
        private int Y { get; set; }
        private TextBlock AttackInfoText;
        private int ID;//角色ID
        private Canvas RootCanvas { get; set; }

    }

 

 

调用的时候传入其绘图根信息及其他具体的一些参数,就能实现这个动画的自管理了:

 

 

            AttackInfo InfoAnimation =
                new AttackInfo(BattleInstance.Carrier, X, Y, ID, Info);

 

 

同理,比如DispatcherTimer等也可以这么用。

分享到:
评论

相关推荐

    Silverlight简单动画.

    这个项目“Silverlight简单动画”是你实践Silverlight动画效果的成果,展示了如何在该框架下实现基础的动画功能。 ### 一、Silverlight动画基础 1. **Timeline和Storyboard**: 在Silverlight中,动画是由Timeline...

    Silverlight动画

    **Silverlight动画详解** Silverlight,作为微软推出的一款强大的网络应用程序开发平台,为开发者提供了丰富的图形和媒体处理能力。在Silverlight中,动画是其一大亮点,它使得开发者能够创建出交互性强、视觉效果...

    silverlight 动画

    总的来说,这个压缩包是一个关于Silverlight动画的实践教程,包含了多种图片动画效果的实现,对于想要掌握Silverlight动画技术的开发者来说,这是一个宝贵的参考资料。通过研究其中的代码和设计,可以深入理解...

    silverlight动画

    Silverlight是一种由微软开发的富互联网应用程序(RIA)平台,...这些文件共同构成了一个完整的Silverlight动画应用项目,可以通过解压并使用Visual Studio来查看和运行该项目,进一步学习Silverlight动画的实现方式。

    Silverlight酷炫动画源代码(一)

    在本文中,我们将深入探讨基于Silverlight的酷炫动画源代码,特别关注“ThrowingObject...如果你希望进一步了解这个项目,分析并学习“ThrowingObject_Silverlight”源代码将是深入理解Silverlight动画机制的绝佳途径。

    #开发WPF-Silverlight动画及游戏

    在开发WPF(Windows Presentation Foundation)和Silverlight应用程序时,动画和游戏的创建是一个关键的领域,这使得用户界面更具吸引力和交互性。WPF和Silverlight都是Microsoft .NET Framework的一部分,提供了...

    WPF/Silverlight动画及游戏系列教程及代码(WORD)

    **WPF/Silverlight动画与游戏开发:深入学习与实践** WPF(Windows Presentation Foundation)和Silverlight是Microsoft推出的两款强大的UI框架,主要用于构建富媒体和交互式应用程序。本系列教程专注于这两个平台...

    silverlight 绚丽 航班系统 动画 啊

    综上所述,"Silverlight 绚丽 航班系统"是一个利用Silverlight技术打造的互动型航班管理系统,它结合了强大的动画功能、数据绑定、多媒体支持和良好的用户交互,旨在为用户提供动态、丰富的航班查询和管理体验。

    silverlight datagrid控件动画

    而DataGrid控件是Silverlight中用于显示和管理数据集合的强大工具,通常用于数据绑定和表格展示。 ### DataGrid控件基础 1. **数据绑定**:DataGrid控件可以轻松地与各种数据源绑定,如ObservableCollection、List...

    深蓝色右手 C#开发WPF Silverlight动画及游戏系列教程

    《深蓝色右手 C#开发WPF Silverlight动画及游戏系列教程》是一套全面介绍使用C#编程语言在Windows Presentation Foundation (WPF) 和Silverlight平台上创建动态效果、动画以及游戏的教程。本教程由知名博主Alamiye...

    Silverlight3 水流水位动画

    在本文中,我们将深入探讨如何使用Silverlight 3来创建一个动态且逼真的水流水位动画。Silverlight是一种由微软开发的富互联网应用程序(RIA)技术,它允许开发者创建交互式、媒体丰富的Web应用程序。结合JSON解析,...

    Silverlight 项目首页动画效果(Microsoft Health)

    通过开源的Microsoft Health项目,开发者可以学习到如何结合标准和自定义控件,以及如何利用Silverlight的动画库来提升用户体验,特别是在健康监测和管理这样的应用场景中。对于想要提升自己Silverlight技能或对健康...

    Silverlight拖拉控件管理器2.0

    **Silverlight拖拉控件管理器2.0详解** 在Web开发领域,Microsoft Silverlight是一款强大的富互联网应用程序(RIA)框架,它允许开发者创建交互性强、视觉效果丰富的用户体验。"Silverlight拖拉控件管理器2.0"是...

    Silverlight滑动动画

    首先,让我们了解Silverlight动画的基础。在Silverlight中,动画主要由两部分组成:动画目标和动画本身。动画目标是你想要改变的属性,比如UI元素的位置、大小或颜色。动画则是定义这个目标如何随着时间变化的一系列...

    silverlight 翻转效果 纯动画

    VisualStateManager负责管理UI控件的不同状态,而Storyboard则定义了这些状态之间的动画转换。在这种情况下,我们将创建一个自定义控件,例如一个按钮,当点击时,它会执行一个翻转动画,展示不同的内容或视图。 1....

    Silverlight富媒体动画网站源码

    **Silverlight富媒体动画网站源码详解** Silverlight是一种由微软开发的富互联网应用程序(RIA)平台,专门用于创建具有丰富视觉效果、交互性和多媒体功能的Web应用。它结合了.NET Framework的优势,允许开发者利用...

    Silverlight酷炫动画源代码(二)

    在本篇中,我们将深入探讨如何使用Silverlight技术来创建一个具有酷炫动画效果的菜单。Silverlight,作为Microsoft开发的一款强大的RIA(Rich Internet Application)框架,为Web应用提供了丰富的用户体验和互动性。...

    C#开发WPF Silverlight动画及游戏系列教程(Game Tutorial) 目录.rar

    在本系列教程“C#开发WPF Silverlight动画及游戏”中,我们将深入探讨使用C#编程语言在Windows Presentation Foundation (WPF) 和Silverlight平台上创建动态效果、动画以及游戏的技术。这两个框架都是.NET Framework...

Global site tag (gtag.js) - Google Analytics