2009-01-17 12 views
9

Je cherche à créer un écran de crédits de défilement (éventuellement 3D) pour mon application, similaire à ce que vous pourriez voir à la fin d'un film, mais qui devrait inclure des graphiques, des animations, etc.L'écran des crédits défilant dans WPF ... des idées?

Quelle est la meilleure façon de faire cela? Je pense que je pourrais créer un très grand UserControl qui contient tout le contenu à faire défiler et ensuite l'animer dans un ScrollViewer, ou même juste un Canvas et animer la position, mais il y a des problèmes de performance évidents avec quelque chose comme ça J'ai peur que ce soit trop lent.

Ce serait cool si les crédits pouvaient défiler sur une surface 3D, un peu comme Star Wars, ou avec un effet fisheye, mais je sais squatter sur 3D dans WPF.

Je ne veux certainement une sorte de décoloration/alpha-mélange de sorte que les crédits semblent disparaître dans au fond et/ou disparaître en haut, mais je suis aussi coincé sur la façon de le faire. *

** en fait, pour que je suppose que je pourrais superposer un certain gradient semi-transparent, tant que l'arrière-plan était une couleur unie. *

Répondre

10

Eh bien, puisque personne ne semble avoir des commentaires, je suis allé de l'avant et fait des choses que je décrits et je dois dire que les résultats sont plutôt bons. J'ai utilisé un LinearGradientBrush vertical pour faire l'évanouissement, et j'ai simplement animé un UserControl à l'intérieur d'un Canvas pour le défilement (en animant Canvas.Top de < ActualHeight of Canvas> à (négatif) < ActualHeight of UserControl>). Ça a l'air plutôt bien. :)

est ici l'animation (note que je devais mettre DoubleAnimation.To dans le code à scroller.ActualHeight):

<DoubleAnimation 
x:Name="scrollAnim" 
BeginTime="0:0:30" 
Duration="0:0:30" 
From="200" 
Storyboard.TargetName="scroller" 
Storyboard.TargetProperty="(Canvas.Top)" /> 

Et voici l'élément scroller:

<Canvas 
ClipToBounds="True" 
x:Name="scrollerCanvas"> 
<Credits:ScrollingCredits 
    x:Name="scroller" 
    Canvas.Top="200" 
    Width="{Binding ElementName=this, Path=ActualWidth}" /> 
</Canvas> 

(Il y a un certain d'autres choses se passe, d'où le défilement commence à 0: 0: 30.)

Voici le fader:

<Border 
x:Name="border" 
Opacity="0"> 
<Border.Background> 
    <LinearGradientBrush 
     StartPoint="0,0" 
     EndPoint="0,1"> 
     <GradientStop 
      Offset="0" 
      Color="Black" /> 
     <GradientStop 
      Offset="0.2" 
      Color="#00000000" /> 
     <GradientStop 
      Offset="0.8" 
      Color="#00000000" /> 
     <GradientStop 
      Offset="1" 
      Color="Black" /> 
    </LinearGradientBrush> 
</Border.Background> 
</Border> 
+0

À quoi ressemble ScrollingCredits? Le reste du code n'a pas vraiment de sens sans cela. –

+1

Oh, c'est juste un UserControl très simple qui consiste en un gros TextBlock ... ça pourrait être n'importe quoi. – devios1

2

Vous pouvez utiliser un VisualBrush pour «peindre» votre contrôle utilisateur de crédits sur une surface 3D.