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

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(十八) 完美精灵之八面玲珑(WPF Only)②

 2010-10-01 07:07:47 来源:WEB开发网   
核心提示: 这里我将前面章节中的count改成了FrameCounter(即帧推进器,意义差不多,C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(十八) 完美精灵之八面玲珑(WPF Only)②(6),但是在此处效果不同,它更加动态,大家需要承上启下的分析后比较容易理

这里我将前面章节中的count改成了FrameCounter(即帧推进器,意义差不多,但是在此处效果不同,它更加动态,大家需要承上启下的分析后比较容易理解),然后在生命线程事件中首先判断主角当前的动作状态是否改变(例如主角默认是站立的,当在地图上点击了一下后动作即变成跑动状态),如果改变则调用ChangeAction()方法,该方法完整代码如下:

        /// <summary>
        /// 改变精灵动作状态后激发的属性及线程改变
        /// </summary>
        private void ChangeAction() {
            switch (Action) {
                case Actions.Stop:
                    Timer.Interval = TimeSpan.FromMilliseconds(150); //动作图片切换间隔
                    CurrentStartFrame = 0; //该动作在合成大图中的开始列
                    CurrentEndFrame = EachActionFrameRange[0] - 1; //该动作在合成大图中的结束列
                    OldAction = Actions.Stop; //将当前动作记录进OldAction里
                    break;
                case Actions.Run:
                    Timer.Interval = TimeSpan.FromMilliseconds(150);
                    CurrentStartFrame = EachActionFrameRange[0];
                    CurrentEndFrame = EachActionFrameRange[0] + EachActionFrameRange[1] - 1;
                    OldAction = Actions.Run;
                    break;
                case Actions.Attack:
                    Timer.Interval = TimeSpan.FromMilliseconds(120);
                    CurrentStartFrame = EachActionFrameRange[0] + EachActionFrameRange[1];
                    CurrentEndFrame = EachActionFrameRange[0] + EachActionFrameRange[1] + EachActionFrameRange[2] - 1;
                    OldAction = Actions.Attack;
                    break;
                case Actions.Magic:
                    Timer.Interval = TimeSpan.FromMilliseconds(100);
                    CurrentStartFrame = EachActionFrameRange[0] + EachActionFrameRange[1] + EachActionFrameRange[2];
                    CurrentEndFrame = EachActionFrameRange[0] + EachActionFrameRange[1] + EachActionFrameRange[2] + EachActionFrameRange[3] - 1;
                    OldAction = Actions.Magic;
                    break;
                case Actions.Death:
                    Timer.Interval = TimeSpan.FromMilliseconds(150);
                    CurrentStartFrame = EachActionFrameRange[0] + EachActionFrameRange[1] + EachActionFrameRange[2] + EachActionFrameRange[3];
                    CurrentEndFrame = EachActionFrameRange[0] + EachActionFrameRange[1] + EachActionFrameRange[2] + EachActionFrameRange[3] + EachActionFrameRange[4] - 1;
                    OldAction = Actions.Death;
                    break;
            }
            FrameCounter = CurrentStartFrame;
        }

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

Tags:开发 WPF Silverlight

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