C#WPF如何处理动画到达某一点?

时间:2013-02-06 13:30:59

标签: c# wpf

我是WPF的新手,刚刚开始研究动画,只是为了好玩,我开始制作老式游戏Frogger(一只青蛙必须跨越河流/道路而不会受到汽车撞击的游戏等等)。

我制作了动画,用于在河中屏幕上移动木材的日志:

<Canvas>
        <Rectangle Name="shape_WaterBackground" Fill="#1E90FF" Height="20" Width="260" Canvas.Top="240"/>
        <Rectangle Name="shape_Lumber" Width="40" Canvas.Top="240" Fill="Brown" Height="16" Margin="0,2,0,0" />
        <Image Name="Froggy" Height="20" Width="20" Canvas.Top="300" Canvas.Left="120" Source="Froggy.jpg" />             
</Canvas>

这个特定动画的代码隐藏:

DoubleAnimation Animate_Lumber_Movement = new DoubleAnimation(-40, 280, TimeSpan.Parse("0:0:7"));

Animate_Lumber_Movement.RepeatBehavior = RepeatBehavior.Forever;

shape_Lumber.BeginAnimation(Canvas.LeftProperty, Animate_Lumber_Movement);

现在我的问题是,当日志到达某一点时我该如何处理。原因是(就像你可能已经猜到的那样)我想知道如何在不停止动画的情况下在动画中间(动画中的不同点或时间,而不是静态)执行动作。

它与我在这里描述的问题有些相同:How to determine when an animated sprite reaches a point?,但对于C#WPF。

作为上面代码中的一个例子,我希望青蛙能够生存,如果它跳向河流并且它的Canvas.Leftproperty与动画日志相匹配,或者以其他方式淹死。

非常感谢任何建议(但请记住,我是新手)

对不太好解释的问题表示抱歉:)

谢谢你,以及最好的问候

Lodal

1 个答案:

答案 0 :(得分:0)

由于您只是设置Canvas.Left属性的动画,因此您可以随时设置DispatcherTimer并阅读它(Canvas.GetLeftCanvas.GetTop)。

虽然,也许这只是我,但从概念上讲,WPF动画更适用于短暂的喷射,有点像屏幕转换等 - 并不是真正用于处理整个游戏动画。如果这是你的目标,你可能最好自己处理动画(设置DispatcherTimer,然后在每个刻度上你会更新你的游戏状态)。