多个动画 Windows Phone 7

Multiple Animations Windows Phone 7

我正在尝试制作单机游戏。为了制作掉落图像的动画,我正在使用故事板。我的问题是是否有人知道如何制作多张图片。在这段代码中,我刚刚看到图像掉了下来。有人知道如何在故事板中制作例如 100 张图像的动画吗?

    private Storyboard CreateStoryBoard()
    {
        Storyboard sb = new Storyboard();

        DoubleAnimation firstAnimation = new DoubleAnimation();
        firstAnimation.SpeedRatio = 8;
        firstAnimation.From = 0;
        firstAnimation.To = 600;
        firstAnimation.Duration = new Duration(TimeSpan.FromSeconds(5));




        Storyboard.SetTarget(firstAnimation, Okejka);
        Storyboard.SetTargetProperty(firstAnimation, new PropertyPath("(Canvas.Top)"));
        sb.Children.Add(firstAnimation);
        return sb;
    }


  private void SpinButton_Click(object sender, RoutedEventArgs e)
    {
        Storyboard sb = CreateStoryBoard();
        sb.Begin();
    }

对于每个需要创建DoubleAnimation的对象,每个DoubleAnimation添加到一个Storyboard中,然后播放它。

这是我的AnimationHelper的一个方法,我针对这个案例修改了它。

    public static void Animate(List<DependencyObject> objects, EventHandler onComplete = null)
    {
        Storyboard sb = new Storyboard();
        foreach (DependencyObject obj in objects)
        {
            DoubleAnimation da = new DoubleAnimation();
            da.From = FromValue; // Set you From value
            da.To = ToValue; // Set your To value
            da.Duration = new Duration(TimeSpan.FromSeconds(2)); // Set your Duration
            // a.EasingFunction = anim.Func; Easing function
            // da.BeginTime = anim.BeginTime; Begin time for each DA
            Storyboard.SetTarget(da, obj);
            Storyboard.SetTargetProperty(da, new PropertyPath(/* this your Property path */));
            sb.Children.Add(da);
        }                        
        if (onComplete != null)
            sb.Completed += onComplete;
        sb.Begin();
    }

更新 #1 下一个代码是 Button.Click 事件处理程序,此代码创建 20 个图像并将其添加到 Canvas,下一步是创建动画每个图像使用一个 Storyboard 实例。

    private async void b1_Click(object sender, RoutedEventArgs e)
    {
        CanvasContainer.Children.Clear();
        _images = new List<Image>();

        // load bitmap
        BitmapImage bmp = new BitmapImage(new Uri("Assets/appbar/appbar.italic.png", UriKind.Relative));

        // create 20 Image instance
        for (int i = 0; i < 20; i++)
        {
            Image img = new Image();
            img.Source = bmp;
            img.Stretch = Stretch.Fill;
            img.Width = 20;
            img.Height = 20;

            _images.Add(img);
            Canvas.SetTop(img, 0);
            Canvas.SetLeft(img, i * 20 + 5);
            CanvasContainer.Children.Add(img);
        }

        // Simulate some delay or any task (3 sec)
        await Task.Delay(3000); 


        Storyboard sb = new Storyboard();
        // delay animation time for each object
        TimeSpan beginTime = TimeSpan.FromMilliseconds(0);

        foreach (Image img in _images)
        {
            DoubleAnimation da = new DoubleAnimation();
            da.From = 0; // Set start value to 0 px
            da.To = 700; // Set end value to 700 px
            da.Duration = new Duration(TimeSpan.FromSeconds(2)); // Set animation time to 2 sec
            da.BeginTime = beginTime; // Set delay for each Image
            beginTime += TimeSpan.FromMilliseconds(100);

            Storyboard.SetTarget(da, img);
            Storyboard.SetTargetProperty(da, new PropertyPath("(Canvas.Top)"));

            sb.Children.Add(da);
        }

        sb.Begin();
    }

代码结果: