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

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

 2009-07-01 07:07:30 来源:WEB开发网   
核心提示: //游戏窗口刷新主线程间隔事件 private void Timer_Tick(object sender, EventArgs e) { …… //判断主角是否移动到了目标,如果是则动作切换成停止 if (ArriveTarget()) { Spirit.A

        //游戏窗口刷新主线程间隔事件
        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*寻路移动,完美的衔接与枢纽。

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

Tags:开发 WPF Silverlight

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