2012-04-01 3 views
4

Ich habe einen Würfel für ein Spiel gemacht (in C#), es ist ein Usercontrol, das ein Storyboard verwendet, um mehrere Bilder hintereinander zu zeigen (wie eine Diashow), so dass es wie ein rollendes 3D aussieht sterben. Das Problem ist, es bei einem bestimmten Schlüsselrahmen zu starten und zu stoppen. Es scheint logisch, dafür Pause() und Resume() zu verwenden, aber ich kann nicht herausfinden, wie man bei einem exakten keyFrame pausiert.Stop Storyboard auf exact keyFrame

Einige Leute verwenden einen separaten DispatcherTimer, um dies zu tun, aber das ist nicht präzise genug, um es bei genau diesem Schlüsselbild zu stoppen. (Zum Beispiel, wenn Sie 4 werfen, muss es auf dem 4 Bild stoppen).

Also, es wäre toll, wenn es irgendeine Methode wie folgt ist:

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

Hier ist ein Ausschnitt aus meinem Storyboard in 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> 
..... 

Und einige Bilder der Dinge klarer zu machen:

1234

+1

Vielleicht ist es einfacher, Animationen für jeden Fall zu komponieren? –

+0

@MaratKhasanov Das kann tatsächlich machbar sein, es gibt 36 Fälle, aber da Sie den Startpunkt mit Seek() ändern können, müsste ich 6. tx! Obwohl ich immer noch gerne wissen würde, ob es einen richtigen Weg gibt. – Jesse

+0

Haben Sie herausgefunden, wie es geht? –

Antwort

2

versuchen Sie dies ...

mein Beispiel ist ein rotierender Pfeil, und ich kann es in einem bestimmten Winkel stoppen.

<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