C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(三十三) 锦上添花之魔法特效装饰
2010-09-30 20:58:14 来源:WEB开发网本节我将以冻结魔法为例,向大家讲解如何为魔法增加漂亮的特效装饰。
经过前面的学习,大家是否已总结出一个规律:需要增加额外东西时,首先想到的即是用户控件;那么我们首先创建一个名为QXDecoration的用户控件。接下来就是准备素材了。这里我制作了3张用于装饰的冰刺:
分别命名为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);
}
……
Tags:开发 WPF Silverlight
编辑录入:爽爽 [复制链接] [打 印]- ››开发Android 日历教程
- ››开发学院总结 Win 8实用技巧大全
- ››开发学院原创教程:把win8的IE10放桌面上方法(非...
- ››silverlight全屏显示图片
- ››Silverlight MVVM 模式(一) 切近实战
- ››开发者眼中的Windows Phone和Android
- ››开发学院教你用SQL 语句最快速清空MySQL 数据表的...
- ››WPF学习笔记12. Binding (5)
- ››WPF学习笔记11. Binding (4)
- ››WPF学习笔记10. Binding (3)
- ››WPF学习笔记9. Binding (2)
- ››WPF学习笔记8. Binding
更多精彩
赞助商链接