在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动画基础 1. **Timeline和Storyboard**: 在Silverlight中,动画是由Timeline...
**Silverlight动画详解** Silverlight,作为微软推出的一款强大的网络应用程序开发平台,为开发者提供了丰富的图形和媒体处理能力。在Silverlight中,动画是其一大亮点,它使得开发者能够创建出交互性强、视觉效果...
总的来说,这个压缩包是一个关于Silverlight动画的实践教程,包含了多种图片动画效果的实现,对于想要掌握Silverlight动画技术的开发者来说,这是一个宝贵的参考资料。通过研究其中的代码和设计,可以深入理解...
Silverlight是一种由微软开发的富互联网应用程序(RIA)平台,...这些文件共同构成了一个完整的Silverlight动画应用项目,可以通过解压并使用Visual Studio来查看和运行该项目,进一步学习Silverlight动画的实现方式。
在本文中,我们将深入探讨基于Silverlight的酷炫动画源代码,特别关注“ThrowingObject...如果你希望进一步了解这个项目,分析并学习“ThrowingObject_Silverlight”源代码将是深入理解Silverlight动画机制的绝佳途径。
在开发WPF(Windows Presentation Foundation)和Silverlight应用程序时,动画和游戏的创建是一个关键的领域,这使得用户界面更具吸引力和交互性。WPF和Silverlight都是Microsoft .NET Framework的一部分,提供了...
**WPF/Silverlight动画与游戏开发:深入学习与实践** WPF(Windows Presentation Foundation)和Silverlight是Microsoft推出的两款强大的UI框架,主要用于构建富媒体和交互式应用程序。本系列教程专注于这两个平台...
综上所述,"Silverlight 绚丽 航班系统"是一个利用Silverlight技术打造的互动型航班管理系统,它结合了强大的动画功能、数据绑定、多媒体支持和良好的用户交互,旨在为用户提供动态、丰富的航班查询和管理体验。
而DataGrid控件是Silverlight中用于显示和管理数据集合的强大工具,通常用于数据绑定和表格展示。 ### DataGrid控件基础 1. **数据绑定**:DataGrid控件可以轻松地与各种数据源绑定,如ObservableCollection、List...
《深蓝色右手 C#开发WPF Silverlight动画及游戏系列教程》是一套全面介绍使用C#编程语言在Windows Presentation Foundation (WPF) 和Silverlight平台上创建动态效果、动画以及游戏的教程。本教程由知名博主Alamiye...
在本文中,我们将深入探讨如何使用Silverlight 3来创建一个动态且逼真的水流水位动画。Silverlight是一种由微软开发的富互联网应用程序(RIA)技术,它允许开发者创建交互式、媒体丰富的Web应用程序。结合JSON解析,...
通过开源的Microsoft Health项目,开发者可以学习到如何结合标准和自定义控件,以及如何利用Silverlight的动画库来提升用户体验,特别是在健康监测和管理这样的应用场景中。对于想要提升自己Silverlight技能或对健康...
**Silverlight拖拉控件管理器2.0详解** 在Web开发领域,Microsoft Silverlight是一款强大的富互联网应用程序(RIA)框架,它允许开发者创建交互性强、视觉效果丰富的用户体验。"Silverlight拖拉控件管理器2.0"是...
首先,让我们了解Silverlight动画的基础。在Silverlight中,动画主要由两部分组成:动画目标和动画本身。动画目标是你想要改变的属性,比如UI元素的位置、大小或颜色。动画则是定义这个目标如何随着时间变化的一系列...
VisualStateManager负责管理UI控件的不同状态,而Storyboard则定义了这些状态之间的动画转换。在这种情况下,我们将创建一个自定义控件,例如一个按钮,当点击时,它会执行一个翻转动画,展示不同的内容或视图。 1....
**Silverlight富媒体动画网站源码详解** Silverlight是一种由微软开发的富互联网应用程序(RIA)平台,专门用于创建具有丰富视觉效果、交互性和多媒体功能的Web应用。它结合了.NET Framework的优势,允许开发者利用...
在本篇中,我们将深入探讨如何使用Silverlight技术来创建一个具有酷炫动画效果的菜单。Silverlight,作为Microsoft开发的一款强大的RIA(Rich Internet Application)框架,为Web应用提供了丰富的用户体验和互动性。...
在本系列教程“C#开发WPF Silverlight动画及游戏”中,我们将深入探讨使用C#编程语言在Windows Presentation Foundation (WPF) 和Silverlight平台上创建动态效果、动画以及游戏的技术。这两个框架都是.NET Framework...