2012-04-01 59 views
4

我为我制作的一些游戏(在C#中)制作了一个模组,它是一个用户控件,它使用故事板在多个图像之后显示多个图像(如幻灯片),因此它看起来像一个滚动的3D死。问题是在特定的keyFrame上启动和停止它。为此,使用Pause()和Resume()似乎是合乎逻辑的,但我无法弄清楚如何在确切的keyFrame上暂停。在精确keyFrame处停止故事板

有些人使用一个单独的dispatcherTimer来做到这一点,但这不够精确,无法在该关键帧处停下来。 (例如,如果你扔4,它必须停在4图像上)。

所以,这将是巨大的,如果有这样一些方法:

TimeSpan keyTime = new TimeSpan(0,0,0,0,750); // 750 miliseconds 
myStoryBoard.ResumeTo(keyTime); // <- doesn't exist as far as I know 

这里是我的故事板在XAML代码片段:

<Storyboard x:Key="DieStoryBoard" RepeatBehavior="Forever"> 

     <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="image1"> 

      <DiscreteObjectKeyFrame KeyTime="0"> 
       <DiscreteObjectKeyFrame.Value> 
        <Visibility>Visible</Visibility> 
       </DiscreteObjectKeyFrame.Value> 
      </DiscreteObjectKeyFrame> 

      <DiscreteObjectKeyFrame KeyTime="0:0:0.05"> 
       <DiscreteObjectKeyFrame.Value> 
        <Visibility>Collapsed</Visibility> 
       </DiscreteObjectKeyFrame.Value> 
      </DiscreteObjectKeyFrame> 

     </ObjectAnimationUsingKeyFrames> 


     <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="image2"> 

      <DiscreteObjectKeyFrame KeyTime="0:0:0.05"> 
       <DiscreteObjectKeyFrame.Value> 
        <Visibility>Visible</Visibility> 
       </DiscreteObjectKeyFrame.Value> 
      </DiscreteObjectKeyFrame> 

      <DiscreteObjectKeyFrame KeyTime="0:0:0.10"> 
       <DiscreteObjectKeyFrame.Value> 
        <Visibility>Collapsed</Visibility> 
       </DiscreteObjectKeyFrame.Value> 
      </DiscreteObjectKeyFrame> 

     </ObjectAnimationUsingKeyFrames> 


     <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="image3"> 

      <DiscreteObjectKeyFrame KeyTime="0:0:0.10"> 
       <DiscreteObjectKeyFrame.Value> 
        <Visibility>Visible</Visibility> 
       </DiscreteObjectKeyFrame.Value> 
      </DiscreteObjectKeyFrame> 

      <DiscreteObjectKeyFrame KeyTime="0:0:0.15"> 
       <DiscreteObjectKeyFrame.Value> 
        <Visibility>Collapsed</Visibility> 
       </DiscreteObjectKeyFrame.Value> 
      </DiscreteObjectKeyFrame> 

     </ObjectAnimationUsingKeyFrames> 
..... 

和一些图像,使事情更清晰:

1234

+1

也许这会更容易为每个案件组成动画? – 2012-04-01 17:42:38

+0

@MaratKhasanov这实际上可行,有36个案例,但由于您可以使用Seek()更改起点,所以我需要6. tx!尽管我仍然想知道是否有适当的课程。 – Jesse 2012-04-01 18:22:10

+0

你有没有想过如何最终做到这一点? – 2012-05-10 08:25:06

回答

2

试试这个...

我的例子是一个旋转的箭头,我可以在指定的角度停止它。

<Window.Resources> 
    <Storyboard x:Key="Storyboard1"> 
     <DoubleAnimationUsingKeyFrames  
      Storyboard.TargetProperty="(UIElement.RenderTransform). 
      (TransformGroup.Children)[2].(RotateTransform.Angle)" 
      Storyboard.TargetName="RightPanelButton1"> 
      <DiscreteDoubleKeyFrame KeyTime="0:0:0" Value="0.0"/> 
      <DiscreteDoubleKeyFrame KeyTime="0:0:1" Value="45.0"/> 
      <DiscreteDoubleKeyFrame KeyTime="0:0:2" Value="90.0"/> 
      <DiscreteDoubleKeyFrame KeyTime="0:0:3" Value="135.0"/> 
      <DiscreteDoubleKeyFrame KeyTime="0:0:4" Value="180.0"/> 
     </DoubleAnimationUsingKeyFrames> 
    </Storyboard> 
</Window.Resources> 



Storyboard st = ((Storyboard)this.Resources["Storyboard1"]); 

st.Begin(); 
st.Seek(new TimeSpan(0,0,2)); 
st.Pause(); 

Abbas Ahmed