我是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
答案 0 :(得分:0)
由于您只是设置Canvas.Left
属性的动画,因此您可以随时设置DispatcherTimer
并阅读它(Canvas.GetLeft
或Canvas.GetTop
)。
虽然,也许这只是我,但从概念上讲,WPF动画更适用于短暂的喷射,有点像屏幕转换等 - 并不是真正用于处理整个游戏动画。如果这是你的目标,你可能最好自己处理动画(设置DispatcherTimer
,然后在每个刻度上你会更新你的游戏状态)。