6

スムーズなテキストアニメーションでマーキーコントロールを構築しようとしています。現在の取り組みは次のとおりです。

  • 変換変換の使用
  • Canvasの依存関係プロパティ(左、右)でのアニメーションの使用
  • カスタム依存関係プロパティ(Point)でのアニメーションの使用、および描画ビジュアル(formattedtext)の使用
  • CompositionTarget.Renderingを使用する

ただし、アニメーションは依然として途切れ途切れでリソースを大量に消費します(2〜10%のCPU)。

デフォルトのwpfウィンドウで使用されるテストコードは、スムーズなアニメーションを生成するはずです。

   <TextBlock x:Name="_box" FontSize="64" CacheMode="BitmapCache" Text="lorem ipsum">
        <TextBlock.RenderTransform>
            <TranslateTransform x:Name="AnimatedTranslateTransform" X="0" Y="0" />
        </TextBlock.RenderTransform>
        <TextBlock.Triggers>
            <EventTrigger RoutedEvent="TextBlock.Loaded">
              <BeginStoryboard>
                <Storyboard>
                  <DoubleAnimation
                    Storyboard.TargetName="AnimatedTranslateTransform" 
                    Storyboard.TargetProperty="X"
                    From="-300" To="300" Duration="0:0:5" 
                    AutoReverse="True" RepeatBehavior="Forever" />
                </Storyboard>
              </BeginStoryboard>
            </EventTrigger>
          </TextBlock.Triggers>
    </TextBlock>

チェックリスト:

  • ソフトウェアレンダリングが行われていないことを確認しました(msパフォーマンスツールとRenderCapability.Tierのチェック)
  • 想像できるあらゆるオブジェクトに対してフリーズを呼び出す
  • ビットマップ効果と透明度を無効にしました
  • そこにあるすべてのマーキーコントロールをチェックしました(同じ問題)

テスト済み:

  • CPU:Intellコア2デュオ(T6600)@ 2.2Ghz
  • RAM:4GB
  • GPU:NVidia GeForce 9600M GS(最新のドライバー)
  • OS:Windows 7(64ビット)

何かアイデア(またはもっと良いのはコード例)?

回答から、これはwpfの問題ではないようです(他のマーキーコントロールは他の人には問題なく機能しますが、私には機能しません)。これをテストしたすべてのマシンで同じ問題が発生しています。

4

3 に答える 3

4

次の場合、アニメーションは完全にMilCoreレイヤーで処理されます。

  1. TranslateTransformはRenderTransform(LayoutTransformではない)であり、
  2. DoubleAnimationなどの単純なアニメーションを使用し、
  3. オブジェクトにはクリッピングや不透明度の計算はありません

デフォルト設定のウィンドウの直接の子であるTextBlockのRenderTransformにDoubleAnimationアニメーションのTranslateTransformを使用してみてください。

  • それでも遅い場合は、マネージコードがまったく関与しておらず、MilCoreの呼び出しが非常に単純であるため、Direct3Dシステムに何か遅いことがありますが、

  • スムーズかつ効率的に機能する場合は、パフォーマンスの低いコードに段階的に変更して、どの変更が速度低下の原因であるかを確認します。

Jobi Joyの回答に対するあなたの回答を考えると、問題はハードウェアまたはDirect3Dセットアップのどこかにあると思いますが、それを見つける唯一の方法はそれをテストすることです。

于 2010-06-09T00:43:56.237 に答える
3

WPF 4.0を使用してCacheMode="BitmapCache"いる場合は、アニメーション化する要素(この場合はおそらく。)に(XAMLで)を設定してみてくださいTextBlock

于 2010-06-09T01:34:54.360 に答える
1

これがお役に立てば幸いです-http://jobijoy.blogspot.com/2008/08/silverlight-marquee-control.html

また、WPFバージョンもここにあります

于 2010-06-09T00:12:59.623 に答える