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

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 : fals

举个例子,好比原先的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

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