C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(二十) 第一部分拓展小结篇
2009-07-01 07:07:30 来源:WEB开发网这里要特别注意的是我用黄色背景注明的totalcost这个变量,它的值代表精灵在两点间移动所需要花费的时间,计算它的目的是因为Storyboard动画是基于时间轴的动画(即在一个规定时间内完成指定动画),第一节中也有相应的说明。因此,为了让精灵在全角度(不仅仅是8个方向,是360度全方位)的任意两点间直线移动时均使用统一速度(每移动一个单元格固定花费UnitMoveCost毫秒),这样不论两点间是30度、40度、55度、76.3度、87.6度等等随意多少角度,精灵均能进行平滑的均速移动。
OK,一切就绪,接下来就是在游戏窗口中的鼠标左键点击事件中启动精灵的直线移动:
private void Carrier_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) {
Point p = e.GetPosition(Map); //点击的地方在Map中的坐标点
//假如点击的地点不是障碍物
if (Matrix[(int)p.X / GridSize, (int)p.Y / GridSize] != 0) {
Spirit.Destination = p; //设置主角的最终移动目的地
Spirit.Action = Actions.Run; //主角动作切换成跑步状态
Spirit.IsAStarMoving = false; //非寻路模式
NormalMoveTo(p); //两点间建立直线移动
}
}
看完上面代码有朋友就要问了:IsAStarMoving是什么东西?简单讲,它是精灵直线移动与A*寻路移动的枢纽。虽然我们实现了NormalMoveTo()和AStarMoveTo()这两种移动方式,但是如何在逻辑中对其进行很好的衔接,这里就必须加入IsAStarMoving这个精灵属性,有了它,我们就可以在窗口刷新事件中这样写:
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
更多精彩
赞助商链接