Que vous créiez une application ou des animations scriptées complexes, vous devez considérer la performance et l’optimisation, à mesure que la taille de vos conceptions Flash augmente. Lorsque votre contenu demeure statique (par exemple une occurrence de Shape rectangulaire), Flash et AIR ne l’optimisent pas. Par conséquent, lorsque vous modifiez la position du rectangle, Flash Player ou AIR redessine la totalité de l’occurrence de Shape.
Vous pouvez mettre en cache des objets d’affichage spécifiques pour améliorer les performances de votre fichier SWF. L’objet d’affichage est essentiellement une
surface
, c’est-à-dire une version bitmap des données vectorielles de l’occurrence, données non destinées à être considérablement modifiées tout au long de la vie de votre fichier SWF. Ainsi, les occurrences pour lesquelles la mise en cache est activée ne sont pas continuellement redessinées pendant la lecture du fichier SWF, et le rendu de ce dernier est plus rapide.
Remarque :
vous pouvez mettre à jour les données vectorielles au moment de la recréation de la surface. Ainsi, les données vectorielles mises en cache dans la surface ne doivent pas nécessairement être les mêmes pour l’ensemble du fichier SWF.
Pour qu’un objet d’affichage mette en cache sa représentation sous forme de bitmap, il suffit d’activer sa propriété
cacheAsBitmap
(
true
). Flash Player ou AIR crée un objet de surface pour l’occurrence, correspondant à une image bitmap mise en cache et non à des données vectorielles. Si vous modifiez les limites de l’objet d’affichage, la surface est recréée et non redimensionnée. Les surfaces peuvent s’imbriquer dans d’autres surfaces. La surface copiera l’image bitmap sur sa surface parent. Pour plus d’informations, voir
Activation de la mise en cache sous forme de bitmap
.
Les propriétés
opaqueBackground
et
scrollRect
de la classe DisplayObject sont liées à la mise en cache sous forme de bitmap par le biais de la propriété
cacheAsBitmap
. Bien que ces trois propriétés soient indépendantes l’une de l’autre,
opaqueBackground
et
scrollRect
ne sont utiles que lorsqu’un objet est mis en cache sous forme de bitmap. Les avantages des propriétés
opaqueBackground
et
scrollRect
en termes de performances ne sont visibles que si
cacheAsBitmap
est définie sur
true
. Pour plus d’informations sur le défilement du contenu des objets d’affichage, voir
Défilement horizontal ou vertical des objets d’affichage
. Pour plus d’informations sur la définition d’un arrière-plan opaque, voir
Définition d’un arrière-plan opaque
.
Pour plus d’informations sur le masquage du canal alpha, qui demande que vous définissiez la propriété
cacheAsBitmap
sur
true
, voir
Masquage des objets d’affichage
.
Quand activer la mise en cache
L’activation de la mise en cache d’un objet d’affichage crée une surface dont les avantages sont multiples, par exemple pour accélérer le rendu des animations vectorielles complexes. Lorsque vous souhaitez activer la mise en cache, plusieurs scénarios sont disponibles. Il pourrait sembler avantageux de toujours activer la mise en cache pour améliorer les performances de votre fichier SWF. Cependant, dans certains cas, cette opération n’a aucun effet bénéfique et risque même parfois de ralentir le fichier. Cette section présente des cas où la mise en cache s’avère bénéfique, et d’autres où il est préférable d’utiliser les objets de façon normale.
Les performances générales des données mises en cache dépendent de la complexité des données vectorielles de vos occurrences, de la quantité de modifications et de la définition, ou non, de la propriété
opaqueBackground
. Si vous modifiez de petites zones, la différence entre l’utilisation d’une surface et celle de données vectorielles sera négligeable. Vous pouvez dans ce cas tester les deux scénarios avant de déployer votre application.
Quand utiliser la mise en cache sous forme de bitmap
Ce qui suit est une série de scénarios dans lesquels vous pouvez voir les bénéfices significatifs qui résultent de la mise en cache sous forme de bitmap.
-
Image complexe d’arrière-plan : application qui contient une image d’arrière-plan complexe de données vectorielles (peut-être une image à laquelle vous avez appliqué la commande de traçage de bitmap ou illustration créée dans Adobe Illustrator®). Vous pouvez animer les caractères sur l’arrière-plan, ce qui ralentit l’animation parce que l’arrière-plan a besoin de continuellement régénérer les données vectorielles. Pour améliorer les performances, vous pouvez définir la propriété
opaqueBackground
de l’objet d’affichage d’arrière-plan sur
true
. L’arrière-plan est rendu en tant que bitmap et peut être redessiné rapidement pour que l’animation soit lue beaucoup plus vite.
-
Champ de texte de défilement : application qui affiche une grande quantité de texte dans un champ de texte de défilement. Vous pouvez placer le champ de texte dans un objet d’affichage que vous définissez comme déroulant à l’aide de bornes de déroulement (propriété
scrollRect
). Ceci permet un déroulement de pixels rapide pour l’occurrence indiquée. Quand un utilisateur déroule l’occurrence d’objet d’affichage, Flash Player ou AIR fait défiler les pixels déroulés vers le haut et génère la zone nouvellement exposée au lieu de régénérer tout le champ de texte.
-
Système de fenêtres : application comportant un système complexe de chevauchement de fenêtres. Chaque fenêtre peut être ouverte ou fermée (par exemple, les fenêtres du navigateur Web). Si vous marquez chaque fenêtre en tant que surface (en définissant la propriété
cacheAsBitmap
sur
true
), chaque fenêtre est isolée et mise en cache. Les utilisateurs peuvent faire glisser les fenêtres de manière à ce qu’elles se chevauchent. Chaque fenêtre n’a pas besoin de régénérer le contenu vectoriel.
-
Masquage du canal alpha : si vous utilisez le masquage du canal alpha, vous devez définir la propriété
cacheAsBitmap
sur
true
. Pour plus d’informations, voir
Masquage des objets d’affichage
.
Activer la mise en cache sous forme de bitmap dans tous ces scénarios améliore la réactivité et l’interactivité de l’application en optimisant les graphiques vectoriels.
Par ailleurs, lorsque vous appliquez un filtre à un objet d’affichage,
cacheAsBitmap
est automatiquement définie sur
true
, même si vous l’avez explicitement définie sur
false
. Si vous supprimez tous les filtres appliqués à l’objet d’affichage, la propriété
cacheAsBitmap
retrouve la valeur précédemment définie.
Quand éviter d’utiliser la mise en cache sous forme de bitmap
L’utilisation à mauvais escient de cette fonction risque d’affecter les performances du fichier SWF. Avant d’utiliser la mise en cache sous forme de bitmap, tenez compte des considérations suivantes :
-
N’abusez pas des surfaces (objets d’affichage avec mise en cache activée). Chaque surface utilise plus de mémoire qu’un objet d’affichage standard, ce qui signifie que vous ne devez activer les surfaces que lorsqu’il est nécessaire d’améliorer les performances de rendu.
Un bitmap caché utilise beaucoup plus de mémoire qu’un objet d’affichage standard. Par exemple, si la taille d’une occurrence de Sprite sur la scène correspond à 250 pixels sur 250 pixels, elle est susceptible d’utiliser en cache 250 Ko au lieu d’1 Ko pour une occurrence de Sprite standard (non en cache).
-
Evitez de zoomer dans les surfaces cachées. Si vous abusez de la mise en cache sous forme de bitmap, une grande quantité de mémoire sera occupée (voir la puce précédente), surtout si vous zoomez sur le contenu.
-
Utilisez des surfaces essentiellement non statiques (sans animation) pour les occurrences d’objets d’affichage. Vous pouvez faire glisser ou déplacer l’occurrence, mais son contenu ne doit pas être animé ni subir de nombreuses modifications (les animations ou les contenus qui changent sont plus fréquents lorsqu’une occurrence de MovieClip contient une animation ou une occurrence de Video). Par exemple, si vous faites pivoter ou transformez une occurrence, la différence entre la surface et les données vectorielles rend le traitement difficile et affecte le fichier SWF.
-
Panacher des surfaces avec des données vectorielles accroît la charge de traitement de Flash Player et AIR (et quelquefois de l’ordinateur). Dans la mesure du possible, regroupez les surfaces, en particulier lorsque vous créez des applications à fenêtres.
-
Ne mettez pas en cache les objets dont les graphiques sont fréquemment modifiés. A chaque fois que vous exécutez une mise à l’échelle, inclinaison ou rotation de l’objet d’affichage, modifiez l’alpha ou la transformation de couleur, déplacez des objets d’affichage enfant ou tracez à l’aide de la propriété graphique, la mémoire cache des bitmaps est régénérée. Si cette opération se produit à chaque image, le moteur d’exécution doit tracer l’objet dans une image bitmap, puis copier celle-ci sur la scène, d’où une charge de travail accrue par rapport au simple tracé de l’objet non mis en cache sur la scène. L’impact sur les performances de la mise en cache par rapport à la fréquence de mise à jour varie selon la complexité et la taille de l’objet d’affichage et ne peut être déterminé qu’en testant le contenu concerné.
Activation de la mise en cache sous forme de bitmap
Pour activer la mise en cache d’un objet d’affichage sous forme de bitmap, définissez sa propriété
cacheAsBitmap
sur
true
:
mySprite.cacheAsBitmap = true;
Après avoir défini la propriété
cacheAsBitmap
sur
true
, vous remarquerez que l’objet d’affichage accroche automatiquement les pixels sur les coordonnées entières. Lorsque vous testez le fichier SWF, vous devriez remarquer que le rendu d’une animation associée à une image vectorielle complexe est bien plus rapide.
Une surface (bitmap en cache) n’est pas créée même quand
cacheAsBitmap
est défini sur
true
s’il se produit l’un ou l’autre des événements suivants :
Matrices de transformation des images bitmap mises en cache
Dans les applications AIR pour périphériques mobiles, vous devriez définir la propriété
cacheAsBitmapMatrix
à chaque fois que vous définissez la propriété
cacheAsBitmap
. Définir cette propriété permet d’appliquer un large éventail de transformations à l’objet d’affichage sans déclencher un nouveau rendu.
mySprite.cacheAsBitmap = true;
mySprite.cacheAsBitmapMatrix = new Matrix();
Lorsque vous définissez cette propriété, vous pouvez appliquer la transformation complémentaire suivante à l’objet d’affichage sans mettre à nouveau l’objet en cache :
Ces transformations sont appliquées directement à l’image bitmap mise en cache.
|
|
|