多个动画Windows Phone 7

时间:2015-05-26 12:06:59

标签: c# windows-phone-7 windows-phone

我正在尝试制作单手机游戏。动画下降图像我正在使用故事板。我的问题是,如果有人知道如何制作多个图像。在这段代码中我只是在图像上掉下来。 Somone知道如何在故事板中制作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();
    }

1 个答案:

答案 0 :(得分:2)

对于你需要的每个对象创建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();
    }

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

    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();
    }

代码结果:

Code working demonstration