我在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 - 由于对象的当前阶段,操作无效。
当我调试它时,我不明白这里的问题是什么我可以看到找到了图像。
答案 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.FruitImage
是Image,您可以简单地为其设置动画:
cherry.FruitImage.BeginAnimation(
Canvas.TopProperty,
new DoubleAnimation(-150, 500, TimeSpan.FromSeconds(5)));
无需故事板。