WEB开发网
开发学院软件开发C语言 C#开发WPF/Silverlight动画及游戏系列教程(Game C... 阅读

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(三十三) 锦上添花之魔法特效装饰

 2010-09-30 20:58:14 来源:WEB开发网   
核心提示:本节我将以冻结魔法为例,向大家讲解如何为魔法增加漂亮的特效装饰,C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(三十三) 锦上添花之魔法特效装饰,经过前面的学习,大家是否已总结出一个规律:需要增加额外东西时,表现出来的效果会更加逼真与贴切,都准备好后,首先想到的即是用户控件;那么我

本节我将以冻结魔法为例,向大家讲解如何为魔法增加漂亮的特效装饰。

经过前面的学习,大家是否已总结出一个规律:需要增加额外东西时,首先想到的即是用户控件;那么我们首先创建一个名为QXDecoration的用户控件。接下来就是准备素材了。这里我制作了3张用于装饰的冰刺:

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(三十三) 锦上添花之魔法特效装饰

分别命名为4-0,4-1,4-2,其命名规则对应上一节中的魔法类型设定,即所有冰冻类魔法均可以用之来装饰。为什么要使用3张呢?其实一张就已足够了,只是效果上每个精灵被冻结后将一模一样;而通过随机从这3张中抽取1张用于装饰冻结效果将大幅度增加画面的生动性,在大量精灵同时被冻结的情况下产生一种宏大的气势感;另外,如果您能通过Blend画出一个类似的冰刺,那么基于矢量的装饰物将可以任意的拉伸及变化,表现出来的效果会更加逼真与贴切。

都准备好后,代码实现起来是很简单的,首先将配置写进Config.xml:

<Decoration Code="4" Num="3" Duration="2" CenterX="40" CenterY="60"></Decoration>

接下来只需在魔法触发伤害帧时将对应的魔法效果装饰附加到被攻击对象的脚底即可:

……
//附加特效装饰
if (magic.DecorationCode != -1 && canvas.FindName(string.Format("Decoration{0}", enemy.Name)) == null) {
    LoadXElement(string.Format("Decoration{0}", magic.DecorationCode.ToString()), GetTreeNode(SystemConfig, "Decoration", "Code", magic.DecorationCode.ToString()));
    XElement DecorationData = GetXElement(string.Format("Decoration{0}", magic.DecorationCode.ToString()));
    Random rm = new Random();
    QXDecoration decoration = new QXDecoration() {
      BodySource = getImage(string.Format("Decoration/{0}-{1}.png", magic.DecorationCode, rm.Next((int)DecorationData.Attribute("Num") - 1))),
      CenterX = (double)DecorationData.Attribute("CenterX"),
      CenterY = (double)DecorationData.Attribute("CenterY"),
      X = enemy.X,
      Y = enemy.Y,
      Duration = (double)DecorationData.Attribute("Duration"),
    };
    canvas.RegisterName(string.Format("Decoration{0}", enemy.Name), decoration);
    canvas.Children.Add(decoration);
}
……

1 2 3  下一页

Tags:开发 WPF Silverlight

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接