我正在学习c#和wpf。我在Visual Studio 2012中运行了该项目。为了更好地学习C#和WPF,我正在制作一个恰好是Simon Says游戏的练习应用程序。我有两个窗户。第一个窗口有一个“播放!”显示下一个窗口的按钮。这个窗口有4个按钮。我有一个整数数组,以便玩家必须按顺序按下按钮。为了向玩家展示订单,我想按照数组中生成的顺序逐个动画每个按钮。
这些按钮有4种不同的颜色,每个我的动画都来自Blend中的Storyboard。动画将按钮从原始颜色变为红色,然后在两秒钟内返回。
动画可以正常工作,但所有按钮同时显示动画。我想要第一个按钮来制作动画,然后当它完成时,下一个按钮等等。我怎样才能最好地使用C#和WPF。谢谢您的帮助。如果需要,我可以上传代码。
运行动画的功能
public void startbtn_Click(object sender, RoutedEventArgs e)
{
// Show the animation sequence for each button
// up until the current level. (getCurrentLevel is currently set to 5)
for (int i = 0; i <= engine.getCurrentLevel(); i++)
{
// engine.animate(i) returns the button at sequence i to animate
animate(engine.animate(i));
}
}
private void animate(int index)
{
// Storyboard for each button is in the format of ButtonAnimation_INDEX where INDEX is 1, 2, 3 or 4
Storyboard btnAnimation = (Storyboard)this.Resources["ButtonAnimation_" + index];
if (btnAnimation != null)
{
btnAnimation.Begin();
}
}
答案 0 :(得分:0)
我使用Completed事件想出来了。我现在有功能检查当前序列是否低于当前级别。如果是这意味着可以动画另一个按钮。因此,已完成的事件将再次运行该功能,并使用下一个按钮来设置动画。
public void startbtn_Click(object sender, RoutedEventArgs e)
{
engine.resetSequence(); // Start from sequence 0
// Animate first button
animate(engine.animate());
}
private void animate(int index)
{
// Storyboard for each button is in the format of ButtonAnimation_INDEX where INDEX is 1, 2, 3 or 4
Storyboard btnAnimation = (Storyboard)this.Resources["ButtonAnimation_" + index];
// Added completed event function handler
btnAnimation.Completed += btnAnimation_Completed;
if (btnAnimation != null)
{
btnAnimation.Begin();
}
}
void btnAnimation_Completed(object sender, EventArgs e)
{
// If another button can be animated in the sequence
if (engine.CurrentSequence() < engine.getCurrentLevel())
{
// Increment the sequence position
engine.nextSequence();
// Run the animation with the next button
animate(engine.animate());
}
}