C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(二十九) 人工智能(AI)之追踪者
2010-09-30 20:46:54 来源:WEB开发网举个例子,好比原先的ArriveTarget()方法写法如下:
private bool ArriveTarget() {
return (storyboard != null && storyboard.GetCurrentProgress(Leader) == 1) ? true : false;
}
改成AI通用的则为:
private bool ArriveTarget(QXSpirit spirit) {
return (Super.storyboard.ContainsKey(spirit.Name) && SpiritStoryBoard(spirit.Name).GetCurrentProgress(spirit) == 1) ? true : false;
}
不光是多了个参数,同时大家是否有注意到我将storyboard定义成了一个字典以存放所有精灵的移动动画板:
public static Dictionary<string, Storyboard> storyboard = new Dictionary<string, Storyboard>();
每个精灵在移动的时候会首先判断以自身名字(spirit.Name)为键名的Storyboard键值是否存在,如果不存在则创建一个新的,接着在此Storyboard上执行移动属性动画,例如直线移动方法改为:
private void StraightMoveTo(QXSpirit spirit, Point p) {
……
if (!Super.storyboard.ContainsKey(spirit.Name)) { Super.storyboard.Add(spirit.Name, new Storyboard()); }
……
}
使用字典来管理所有精灵的移动动画板即方便又高效,我们只需要通过Lambda即可以轻松获取指定键名的Storyboard:
private Storyboard SpiritStoryBoard(string key) {
return Super.storyboard.Single(X => X.Key == key).Value;
}
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
更多精彩
赞助商链接