C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(二十) 第一部分拓展小结篇
2009-07-01 07:07:30 来源:WEB开发网 //游戏窗口刷新主线程间隔事件
private void Timer_Tick(object sender, EventArgs e) {
……
//判断主角是否移动到了目标,如果是则动作切换成停止
if (ArriveTarget()) {
Spirit.Action = Actions.Stop;
} else if (!Spirit.IsAStarMoving && WillCollide()) {
//在寻路移动模式中,主角100%会饶过障碍物的,
//因此只有在非寻路模式中才需要时时判断主角是否将要碰撞障碍物
AStarMoveTo(Spirit.Destination);
Spirit.IsAStarMoving = true;
}
}
通过黄色背景代码部分的逻辑我们可以轻松实现精灵的直线移动与A*移动的转换。即精灵首先进行直线移动,在它没有到达目的地之前(ArriveTarget()==false)我们需要时时判断它是否将要碰撞到障碍物(判断WillCollide()是否==True),并且前提是精灵在此移动中还没启动过A*寻路(IsAStarMoving==false),因为一旦在直线移动中启动过A*寻路,结果100%会引导精灵饶过障碍物到达终点,A*寻路过程中不需要额外再判断是否还会碰撞到障碍物,那是多此一举(如果出现偶然,不要怪别人,怪自己没把A*算法写正确)。如果此两个条件都符合了,则以精灵的移动目标(Destination)为终点启动A*寻路模式,这样就顺利的由直线移动转入到A*寻路移动,完美的衔接与枢纽。
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
更多精彩
赞助商链接