六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 43|回复: 0

#16 StoryBoard vs DispatcherTimer

[复制链接]

升级  3.33%

13

主题

13

主题

13

主题

秀才

Rank: 2

积分
55
 楼主| 发表于 2013-1-15 02:59:24 | 显示全部楼层 |阅读模式
Silverlight Tip of the Day #16 - StoryBoard versus DispatcherTimer for Animation and Game Loops.
 
在第五章,介绍了如何使用DispatcherTimer来进行周期循环。但是,更好的处理方法是使用下面讨论StoryBoard timer 或者 CompositionTarget.Rendering ,这是新加进SilverLight2的功能。 在第五十章将介绍更多关于CompositionTarget.Rendering的知识。
 
根据作者的研究,StoryboardTimer优于DispatcherTimer的原因如下:

  • StoryBoard是一个单独的线程,不受UI的影响,DispatcherTimer 受影响。
  • DispatcherTimer的计数器比Storyboard的计数器精度低。会造成失真。
  • Storyboard在不同的OS和浏览器上运行更稳定。
基于此,让我们看看应该怎么做。在下面的例子中,我们创建一个StoryBoard timer,一个count变量用来表示被MainGameLoop调用次数。我设置了我的调用和开始动画的间隔duration为0,你可以按你的需求去设置。
 
Page.xaml.cs:
 
namespace SilverlightApplication8{    public partial class Page : UserControl    {        Storyboard _gameLoop = new Storyboard();        int count = 0;         public Page()        {            InitializeComponent();            _gameLoop.Duration = TimeSpan.FromMilliseconds(0);            _gameLoop.Completed += new EventHandler(MainGameLoop);            _gameLoop.Begin();        }         void MainGameLoop(object sender, EventArgs e)        {            // Add any game logic/animation here.            // Example:            myTextbox.Text = count.ToString();            count++;             // Continue storyboard timer            _gameLoop.Begin();        }    }} 
Page.xaml:
<UserControl x:Class="SilverlightApplication8.Page"    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"     Width="400" Height="300">    <Grid x:Name="LayoutRoot" Background="White">        <TextBlock x:Name="myTextbox">Display Counter</TextBlock>    </Grid></UserControl> 
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表