2012-04-01 1 views
4

Я сделал кубик для какой-то игры, которую я делаю (в C#), это usercontrol, которая использует раскадровку, чтобы показывать несколько изображений друг за другом (например, слайд-шоу), так что это выглядит как катящийся 3D умереть. Проблема заключается в том, чтобы запустить и остановить его на определенном ключевом фрейме. Кажется логичным использовать Pause() и Resume() для этого, но я не могу понять, как сделать паузу в точном ключевом фрейме.Остановить раскадровку в точной ключевой рамке

Некоторые люди используют отдельный диспетчерTimer для этого, но это недостаточно точное, чтобы остановить его на этом ключевом кадре. (например, если вы бросаете 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

Возможно, будет легче создавать анимацию для каждого случая? –

+0

@MaratKhasanov Это может быть действительно выполнимо, есть 36 случаев, но поскольку вы можете изменить начальную точку с помощью Seek(), мне понадобится 6. tx! Хотя я все равно хотел бы знать, есть ли подходящий способ. – Jesse

+0

Вы поняли, как это сделать в конечном итоге? –

ответ

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 
Смежные вопросы