-1

我正在 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 - 由于对象的当前阶段,操作无效。

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

4

3 回答 3

1

只能添加UIElement到 a中,直接Canvas添加 a是行不通的。BitmapImageCanvas

一种选择可能是添加一个动态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))));
于 2013-04-15T21:59:25.273 回答
0

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

image.BeginInit();
image.UriSource = new Uri(filename, UriKind.Relative);
image.EndInit();
cherryImage.Source = image;
于 2013-04-15T21:38:24.530 回答
0

如果cherry.FruitImageImage,您可以像这样简单地对其进行动画处理:

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

不需要故事板。

于 2013-04-15T21:53:27.710 回答