6
votes

Animation de texte lisse (chapiteau) à l'aide de WPF

essayer de construire un contrôle de chapiteur avec une animation de texte lisse. Les efforts actuels incluent:

  • Utilisation de Traduire Transform
  • Utilisation d'animation sur les propriétés de la dépendance en toile (gauche, droite)
  • Utilisation de l'animation sur la propriété de dépendance personnalisée (point) et à l'aide des éléments visuels de dessin (formatedtext)
  • Utilisation de CompositionTarget.Rendance

    mais l'animation est toujours agitée et intensive de ressource (2-10% de processeur).

    code de test utilisé dans la fenêtre WPF par défaut que je suppose devrait produire une animation douce: xxx

    liste de contrôle:

    • confirmé Aucun rendu logiciel n'est en cours (outil de performance MS et vérifiant RenderCapability.tier)
    • appeler geler sur n'importe quel objet imaginable
    • désactivé n'importe quel effet bitmap et transparence
    • Vérifié tous les contrôles à la chapelle (mêmes problèmes)

      Testé sur:

      • CPU: Intell Core 2 Duo (T6600) @ 2.2GHz
      • RAM: 4GB
      • GPU: Nvidia Geforce 9600m GS (derniers pilotes)
      • OS: Windows 7 (64 bits)

        des idées (ou meilleur exemple de code)?

        des réponses Il semble que ce n'est pas un problème de WPF (d'autres contrôles de chapiteau fonctionnent bien pour les autres mais pas pour moi), Nut J'obtiens les mêmes problèmes sur chaque machine que j'ai testée sur.


1 commentaires

Il semble qu'il y ait un problème avec certains des ordinateurs qui ont été testés. Construire également une version de libération aide beaucoup.


3 Réponses :


1
votes

J'espère que cela peut vous aider - http: //jobijoy.blogspot .COM / 2008/08 / Silverlight-Chapee-Control.html

et la version WPF peut également être trouvée ici


4 commentaires

Oui, c'est l'un des contrôles que j'ai examinés (y compris la version WPF), il n'est pas lisse et il est assez intensif de ressources pour une tâche aussi simple.


J'ai essayé les versions Silverlight et WPF de l'exemple d'application de Jobi Joy sur un matériel oméhé. Les deux animés doucement et utilisaient très peu de ressources, même s'ils animaient beaucoup plus qu'un simple chapiteau. Je pense qu'il doit y avoir quelque chose de spécial sur votre matériel ou votre environnement causant le problème. Peut-être devriez-vous ajouter du matériel détaillé, des systèmes d'exploitation, des spécifications techniques nettes et des numéros d'utilisation des ressources à votre question afin que d'autres puissent tenter de dupliquer votre problème.


C'est vraiment étrange - chaque machine que j'ai testée sur le texte et les jitters d'image toutes les 2 à 5 secondes. J'ai mis à jour ma question.


Bien que cela puisse répondre théoriquement à la question, serait préférable d'inclure les parties essentielles de la réponse ici et de fournir le lien pour référence.



4
votes

Votre animation sera entièrement manipulée à la couche de milcore si:

  1. Votre translateTeTransform est une rendutransform (pas une mise en formeTransform) et
  2. Vous utilisez une animation simple telle qu'une doubleinimation et
  3. Votre objet n'a pas de décalage ni de calcul d'opacité

    Essayez d'utiliser une TRUCLATRANSFORMETRANSETRANSETANSFORMES POUR UN RENDRETRANSFORME SUR UNE TEXTBLOCK D'UNE FILATION DIRECTE D'UNE FENÊTRE AVEC DES RÉGLAGES DEFAULTS.

    • Si cela est toujours lent, votre système Direct3D est quelque chose de lent, car le code géré n'est pas impliqué dans tout et les appels de Milcore sont très simples, mais

    • Si cela fonctionne correctement et efficacement, changez-la progressivement à votre code mal performant pour voir quel changement provoque le ralentissement.

      Compte tenu de votre réponse à la réponse de Jobi Joy, je soupçonnerais que le problème est quelque part dans votre configuration matérielle ou directe3D, mais le seul moyen de découvrir est de le tester.


1 commentaires

J'ai essayé cela (voir la question mise à jour) - J'ai toujours les mêmes problèmes. Des diagnostics que vous pouvez penser à identifier s'il y a un problème avec des machines que je traite?



3
votes

Si vous utilisez WPF 4.0, essayez de définir le fichier cachemode = "bitmapcache" (dans xaml) sur l'élément que vous animez, dans ce cas, probablement un textblock .


2 commentaires

Bonne idée - mais cela ne résout pas mon problème. Il semble que la faute se trouve avec ma machine (OS ou HW) mais je ne peux penser à rien.


Vache sacrée! J'avais eu un problème d'animation qui impliquait une cinquantaine d'éléments de l'UI. Cela m'a prêté pendant plusieurs semaines, mais a été effacée avec cet attribut un. Arg, pourquoi cela m'a-t-il pris si longtemps pour trouver cela?