none
如何使用递归函数调用Animation,而Animation可以依次执行? RRS feed

  • 问题

  • 由于处理的是树结构,难免用递归,用递归的时候,每个递归包含一个Animation,但是Animation执行需要时间,但是代码执行时间忽略不计,如何才能让它们依次执行呢??这里没法使用completed事件啊……而设Begintime好像也没有效果。
    2009年5月21日 12:20

答案

全部回复

  • 没看太明白,请详细说一下。
    2009年5月21日 13:21
    版主
  • 比如说哈,我现在要插入一个结点,动画效果是结点从左上角开始,先移动到根结点旁边,然后一步步地downwards移动到叶子结点,每次移动都是一个动画。
    我首先确定了要插入结点的最终位置,然后用一个递归的函数做移动,比如:

    private void tracedownwards(Node n,Node n。parent)
    {
            p=n.parent;
            if n.parent还有parent
            then tracedownwards(n,p.parent)
           otherwise
           n 朝 p 移动的动画
    }

    但是因为动画需要2秒钟,代码执行只需要几毫秒,所以,递归的前面几个动画的效果会被覆盖,造成的结果是,待插入结点,直接从左上角移动到它应该去的地方了,没有一步步地效果。
    怎么才能让动画依次执行,或者说,让代码等待动画执行完继续执行呢?
    不知道理解问题了没有,有什么不清楚了继续问……守贴
    2009年5月21日 13:30
  • 虽然还是没看太明白,不过大概意思理解了。
    我觉得可以换一种思路解决你的问题,先递归生成所有节点,然后再动态生成一个StoryBoard,
    这个StoryBoard的功能就是就是你要展示的所有动画的过程,这样不涉及程序执行的时间问题,也不涉及一个StoryBoard结束另一个开始的问题了。
    动态生成StoryBoard可以看下面这个帖子
    http://social.microsoft.com/Forums/zh-CN/silverlightzhchs/thread/8f08bf13-fd87-4613-8ad4-6cb2f0135b03

    里面有相关StoryBoard的时间相关,动态生成等方法
    2009年5月21日 14:24
    版主
  • 用Key Frame Animation呀,好的,我试试看!

    用DoubleAnimationUsingKeyFrame 这个动画的话,添加的是SplineDoubleKeyFrame? 我试着用DoubleKeyFrame,但是new 不出来,有个DoubleKeyFrameCollection 不知道怎么用。。
    但是我现在还是用List<SplineDoubleKeyFrame>保存所有的结点
    2009年5月22日 6:39