创建故事板和双重动画

时间:2013-04-15 21:34:32

标签: c# wpf animation storyboard

我在WPF上制作游戏SizzlingHot。我有一个画布,可以加载水果的下落图像。当我点击startButton时,它应该创建一个带有doubleAnimation的故事板,用于落果。我在方法中有以下代码:

NameScope.SetNameScope(this, new NameScope());

Cherry cherry = new Cherry(); // I get the image from this class
// GameCanvas.Children.Add(cherry.FruitImage); // idk if this should be here and its invalid because the parameter in the parantheses shoud be UI element it does not allow BitmapImage                    

DoubleAnimation myDoubleAnimation = new DoubleAnimation(100, 500, new Duration(TimeSpan.FromSeconds(5)));
myDoubleAnimation.From = -150;
myDoubleAnimation.To = 500;            

Storyboard.SetTargetProperty(myDoubleAnimation, new PropertyPath("(Canvas.Top)"));
Storyboard.SetTarget(myDoubleAnimation, cherry.FruitImage); 
Storyboard myStoryboard = new Storyboard();                    

myStoryboard.Children.Add(myDoubleAnimation);
GameCanvas.Resources.Add(myStoryboard,cherry.FruitImage);

myStoryboard.Begin(this, true);

当我运行它时,在最后一行,它给了我一个

  

InvalidOperationException - 由于对象的当前阶段,操作无效。

当我调试它时,我不明白这里的问题是什么我可以看到找到了图像。

3 个答案:

答案 0 :(得分:1)

您只能将UIElement添加到Canvas,直接向BitmapImage添加Canvas将无效。

一个选项可能是添加动态Image并将Source设置为FruitImage,然后您可以在Image上设置GameCanvas的动画/定位

示例:

Cherry cherry = new Cherry();

// Create host for BitmapImage
Image imageHost = new Image { Source = cherry.FruitImage };
GameCanvas.Children.Add(imageHost);

// Animate Image
imageHost.BeginAnimation(Canvas.TopProperty, new DoubleAnimation(-150, 500, new Duration(TimeSpan.FromSeconds(5))));

答案 1 :(得分:0)

尝试在您的图片上执行此操作,如果您还没有:

image.BeginInit();
image.UriSource = new Uri(filename, UriKind.Relative);
image.EndInit();
cherryImage.Source = image;

答案 2 :(得分:0)

如果cherry.FruitImageImage,您可以简单地为其设置动画:

cherry.FruitImage.BeginAnimation(
    Canvas.TopProperty,
    new DoubleAnimation(-150, 500, TimeSpan.FromSeconds(5)));

无需故事板。