C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(三)让物体动起来③

    第三种方法,DispatcherTimer动画,该类型动画与CompositionTarget动画类似,是基于界面线程的逐帧动画,但他与CompositionTarget动画不同,DispatcherTimer动画可以轻松的进行参数设置:

        xaml界面代码仍然沿用第一节的,那么接下来我们在后台代码中创建相关对象:

        Rectangle rect; //创建一个方块作为演示对象

        double speed = 5; //设置移动速度

        Point moveTo; //设置移动目标

        public Window3() {

            InitializeComponent();

            rect = new Rectangle();

            rect.Fill = new SolidColorBrush(Colors.Red);

            rect.Width = 50;

            rect.Height = 50;

            rect.RadiusX = 5;

            rect.RadiusY = 5;

            Carrier.Children.Add(rect);

            Canvas.SetLeft(rect, 0);

            Canvas.SetTop(rect, 0);

            //定义线程

            DispatcherTimer dispatcherTimer = new DispatcherTimer(DispatcherPriority.Normal);

            dispatcherTimer.Tick += new EventHandler(Timer_Tick);

            dispatcherTimer.Interval = TimeSpan.FromMilliseconds(50); //重复间隔

            dispatcherTimer.Start();

        }

 

        private void Carrier_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) {

            moveTo = e.GetPosition(Carrier);

        }

 

        private void Timer_Tick(object sender, EventArgs e) {

            double rect_X = Canvas.GetLeft(rect);

            double rect_Y = Canvas.GetTop(rect);

            Canvas.SetLeft(rect, rect_X + (rect_X < moveTo.X ? speed : -speed));

            Canvas.SetTop(rect, rect_Y + (rect_Y < moveTo.Y ? speed : -speed));

        }

    与上一节的代码类似,不同的地方其实也就是声明动画线程处,共4句:

        DispatcherTimer dispatcherTimer = new DispatcherTimer(DispatcherPriority.Normal);
        dispatcherTimer.Tick += new EventHandler(Timer_Tick);

        dispatcherTimer.Interval = TimeSpan.FromMilliseconds(50); 
        dispatcherTimer.Start();

    第一句申明一个界面计时器DispatcherTimer ,并且设置其线程优先级别为Normal,这是标准设置,你可以根据你自己的需求进行更改,一共10个级别。

    第二句注册Tick 事件,也就是计时器间隔触发的事件。

    第三句设置Tick 事件的间隔,可以有很多方式,我使用的是TimeSpan.FromMilliseconds(),即间隔单位为毫秒。

    第四句启动线程。

    是不是很简单?这样的话可以很轻松的通过Interval 来控制刷新一个对象属性的频率了。接下来我们同样使用Ctrl+F5来测试一下成果。呵呵,结果和第二种动画方法是一样的,存在同样的问题,因为毕竟两种动画的原理是一致的。

    那么到此,三种动态创建动画的方法都已经详细介绍过了,大家可能会有种感觉,比较钟情于第一种WPF/Silverlight推荐的Storyboard动画,既直观又方便使用,而且仿佛不易出错。其实这3种动画都有它特定的使用场合。

    第一种动画适合创建简单的对象位移及直接性质的属性更改(在后面的教程中,我还将更深入的挖掘Storyboard动画的潜力,动态创建更复杂的基于KeyFrame的关键帧动画)。

    第二种动画适合全局属性的时时更改,例如我们后面要讲到的敌人或NPC以及地图等全体性的相对位移及属性更改时就要用到它了。

    第三种动画则非常适合运用在Spirit(角色)的个人动画中,例如角色的移动,战斗,施法等动作。

    小结:前三节分别讲解了Storyboard动画,CompositionTarget动画,DispatcherTimer动画,并横向分析了不同的场合对应不同的动画应用模式,这些将是构成WPF/Silverlight游戏引擎的基础。

    下一节我将介绍如何使用DispatcherTimer动画让对象活起来,敬请关注。

作者:深蓝色右手
教程目录及源码下载: 点击进入
本文版权归作者和CSDN共有,欢迎转载。但未经作者同意必须保留此段声明,且在文章页面显著位置给出原文连接,否则保留追究法律责任的权利。
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
C#开发WPF/Silverlight动画游戏系列教程(Game Tutorial)目录 本系列教程目录如下: C#开发WPF/Silverlight动画游戏系列教程(Game Tutorial):(一)让物体起来C#开发WPF/Silverlight动画游戏系列教程(Game Tutorial):(二)让物体起来C#开发WPF/Silverlight动画游戏系列教程(Game Tutorial):()让物体起来 C#开发WPF/Silverlight动画游戏系列教程(Game Tutorial):(四)实现2D人物动画C#开发WPF/Silverlight动画游戏系列教程(Game Tutorial):(五)实现2D人物动画C#开发WPF/Silverlight动画游戏系列教程(Game Tutorial):(六)完美移 C#开发WPF/Silverlight动画游戏系列教程(Game Tutorial):(七)传说的A*寻径算法 C#开发WPF/Silverlight动画游戏系列教程(Game Tutorial):(八)完美实现A*寻径动画 C#开发WPF/Silverlight动画游戏系列教程(Game Tutorial):(九)2D游戏角色在地图上的移 C#开发WPF/Silverlight动画游戏系列教程(Game Tutorial):(十)斜度α地图的构造及算法 C#开发WPF/Silverlight动画游戏系列教程(Game Tutorial):(十一)地图遮罩层的实现 C#开发WPF/Silverlight动画游戏系列教程(Game Tutorial):(十二)神奇的副本地图 C#开发WPF/Silverlight动画游戏系列教程(Game Tutorial):(十)牵引式地图移模式① C#开发WPF/Silverlight动画游戏系列教程(Game Tutorial):(十四)精灵控件横空出世!① C#开发WPF/Silverlight动画游戏系列教程(Game Tutorial):(十五)精灵控件横空出世!② C#开发WPF/Silverlight动画游戏系列教程(Game Tutorial):(十六)牵引式地图移模式② C#开发WPF/Silverlight动画游戏系列教程(Game Tutorial):(十七)完美精灵之八面玲珑(WPF Only)① C#开发WPF/Silverlight动画游戏系列教程(Game Tutorial):(十八)完美精灵之八面玲珑(WPF Only)② C#开发WPF/Silverlight动画游戏系列教程(Game Tutorial):(十九)完美精灵之八面玲珑(WPF Only) C#开发WPF/Silverlight动画游戏系列教程(Game Tutorial):(二十)第一部分拓展小结篇 C#开发WPF/Silverlight动画游戏系列教程(Game Tutorial):(二十一)主位式地图移模式 C#开发WPF/Silverlight动画游戏系列教程(Game Tutorial):(二十二)重构 - 让代码插上翅膀飞翔 C#开发WPF/Silverlight动画游戏系列教程(Game Tutorial):(二十)自适应性窗口化与全屏化 C#开发WPF/Silverlight动画游戏系列教程(Game Tutorial):(二十四)Be careful!前方怪物出没 C#开发WPF/Silverlight动画游戏系列教程(Game Tutorial):(二十五)完美捕获精灵之神器 -- HitTest C#开发WPF/Silverlight动画游戏系列教程(Game Tutorial):(二十六)通用型角色头像面板 C#开发WPF/Silverlight动画游戏系列教程(Game Tutorial):(二十七)战斗前夜之构建态障碍物系统 C#开发WPF/Silverlight动画游戏系列教程(Game Tutorial):(二十八)经典式属性设计及完美的物理攻击系统 C#开发WPF/Silverlight动画游戏系列教程(Game Tutorial):(二十九)人工智能(AI)之追踪者 C#开发WPF/Silverlight动画游戏系列教程(Game Tutorial):(十)大法师 - 华丽经典之轮回 C#开发WPF/Silverlight动画游戏系列教程(Game Tutorial):(十一) 超酷万变的矢量魔法 C#开发WPF/Silverlight动画游戏系列教程(Game Tutorial):(十二) 雷、混、冰、毒、火、风 - 幻化的魔法魅力! C#开发WPF/Silverlight动画游戏系列教程(Game Tutorial):() 锦上添花之魔法特效装饰 C#开发WPF/Silverlight动画游戏系列教程(Game Tutorial):(十四) 地图编辑器诞生啦! C#开发WPF/Silverlight动画游戏系列教程(Game Tutorial):(十五) 地图编辑器的初步使用 C#开发WPF/Silverlight动画游戏系列教程(Game Tutorial):(十六) 地图自定义切片与导出 C#开发WPF/Silverlight动画游戏系列教程(Game Tutorial):(十七) 地图自适应区域加载 C#开发WPF/Silverlight动画游戏系列教程(Game Tutorial):(十八) 地图间的传送与切换 摘自博客园深蓝色右手文章(原文链接:http://www.cnblogs.com/alamiye010/archive/2009/06/17/1505346.html) 压缩包内的2个文件,chm和exe格式内容一样

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值