`
rcfalcon
  • 浏览: 222339 次
  • 性别: 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 绚丽 航班系统 动画 啊

    silverlight 绚丽 航班系统 啊

    Silverlight Loader

    实现该加载功能的目的就是不想显示Silverlight默认的那个蓝色整圆圆的加载动画, 但如果网速过慢,还是会显示加载SLLoader.xap的动画,另外SLLoader.xap加载完LoadTarget.xap后,打开LoadTarget.xap的过程中也可能会...

    Silverlight2.0功能展示Demo源码

    9、Silverlight(11) - 2.0动画之ColorAnimation, DoubleAnimation, PointAnimation, 内插关键帧动画 10、Silverlight(12) - 2.0外观之样式, 模板, 视觉状态和视觉状态管理器 11、Silverlight(13) - 2.0交互之鼠标...

    Silverlight MMORPG网页游戏源码

    圆月斩,附带HLSL编写的空间扭曲动画效果,技能施放时游戏场景会出现短暂的3D波动效果(空间扭曲动画),这是HLSL给我们所有Silverlight游戏开发者带来的惊喜,2KB成就超绚特效。虽然目前Silverlight 4还无法利用硬件...

    Windows Phone 7 wp7 官方中文教程+例子

    全书206页,涵盖了Window Phone 7 开发基础,Silverlight 交互开发和...第十九章 二维动画与碰撞侦测 第二十章 图形特效与文字显示 第二十一章 游戏画面管理与切换控制 第二十二章 3D 游戏设计 第二十三章 3D 游戏控制

    ASP.NET4高级程序设计第4版 带目录PDF 分卷压缩包 part1

    1.2.5 Silverlight 1.3 总结 第2章 Visual Studio 2.1 Visual Studio 2.1.1 网站和Web项目 2.1.2 创建无项目文件的网站 2.1.3 设计网页 2.2 Visual StudioIDE 2.2.1 解决方案资源管理器 2.2.2 ...

    MSDN杂志2008年四月刊

    Silverlight: 使用 Silverlight 2.0 构建高级 3D 动画 使用 Silverlight 制作动画比您想象的还要简单。在此,我们将使用 XAML、C# 并且通过模拟 DirectX 算法库来创建一个折叠多面体的 3D 应用程序。 采访++: ...

    计算机精品学习资料大放送

    IT认证类: 软件水平 等级考试 思科认证 微软认证 Sun认证 Linux认证 IEEE认证 Java技术: Java SE Java EE Java ME .Net技术: C#语言 VB.NET ASP.NET VC.NET .NET框架 ADO.NET Silverlight 开发语言: C/C++ VC/...

    ASP.NET4高级程序设计(第4版) 3/3

    1.2.5 Silverlight 14 1.3 总结 15 第2章 Visual Studio 16 2.1 Visual Studio 16 2.1.1 网站和Web项目 17 2.1.2 创建无项目文件的网站 18 2.1.3 设计网页 21 2.2 Visual StudioIDE 26 2.2.1 解决...

    《深入浅出 windows phone 7应用开发》样章试读

    开发技术篇介绍了常用控件、布局管理、数据存储、图形动画、多媒体、启动器与选择器、手机感应编程、MVVM模式、Silverlight Toolkit组件和网络编程这些实用的编程知识; 开发实例篇以应用实例的方式综合地讲解了...

    Discuz!NT 3.1免安装版(0428)源码

    在网友阅读帖子主题时,头像下方显示项目和头像弹出层显示项目可以后台自定义,更加方便社区的管理运营。全新的积分系统新增了动画提示效果,积分功能预置支付宝充值,可为论坛运营创收提供有利的条件。转发功能的...

    一款非常好的WPF编程宝典2010 源代码

    1.2.5 Silverlight 12 1.3 WPF体系结构 13 1.4 结束语 17 第2章 XAML 19 2.1 理解XAML 20 2.1.1 WPF之前的图形用户界面 20 2.1.2 XAML变体 21 2.1.3 XAML编译 22 2.2 XAML基础 22 2.2.1 XAML名称空间 23 ...

    Apress.Pro.WPF.in.C.Sharp.2008.2nd.Edition.Feb.2008

    1.2.5 Silverlight 12 1.3 WPF体系结构 13 1.4 结束语 17 第2章 XAML 19 2.1 理解XAML 20 2.1.1 WPF之前的图形用户界面 20 2.1.2 XAML变体 21 2.1.3 XAML编译 22 2.2 XAML基础 22 2.2.1 XAML名称空间 23 2.2.2 后台...

Global site tag (gtag.js) - Google Analytics