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

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(二十) 第一部分拓展小结篇

 2009-07-01 07:07:30 来源:WEB开发网   
核心提示: 这里要特别注意的是我用黄色背景注明的totalcost这个变量,它的值代表精灵在两点间移动所需要花费的时间,C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(二十) 第一部分拓展小结篇(4),计算它的目的是因为Storyboard动画是基于时间轴的动画

这里要特别注意的是我用黄色背景注明的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这个精灵属性,有了它,我们就可以在窗口刷新事件中这样写:

上一页  1 2 3 4 5 6 7 8 9  下一页

Tags:开发 WPF Silverlight

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