2010-05-22 2 views
1

J'ai dit 10 éléments dans un espace particulier, Si j'applique des lueurs et des ombres portées à chacun d'entre eux et tous ces éléments sont généralement statiques. D'autres personnages se déplacent aussi autour d'eux. Je me demande donc s'il serait sage d'utiliser des vecteurs avec des flous et des flous d'actionscript. Ou pour avoir un PNG? et si je ne peux pas avoir de PNG et que je dois travailler avec des vecteurs avec des lumières/flous/ombres. Seraient-ils trop lourds sur le processeur?ActionScript flou/ombre/brille à quel point sont-ils lourds sur le processeur?

Répondre

1

Lorsque vous appliquez un filtre bitmap (lueur, ombre, etc.) à tout contenu, Flash se met automatiquement sur une fonctionnalité appelée Bitmap Caching. Tant que cette fonctionnalité est activée, Flash restitue l'objet en tant que bitmap, puis utilise ce bitmap à la place de l'objet jusqu'à ce qu'il décide qu'il doit effectuer un nouveau rendu de l'objet. Flash restitue à nouveau l'objet chaque fois que les objets internes de l'objet (enfants) changent de quelque façon que ce soit ou si l'objet lui-même subit n'importe quelle transformation en dehors de la simple traduction (changements de x/y).

Cela signifie:

  1. Si votre objet ne change pas en interne, et il ne tourne pas ou l'échelle de changement, une fois que vous appliquez un filtre, il n'a pas d'importance si l'objet contient bitmaps ou des vecteurs. En interne Flash l'a mis en cache sur une image bitmap, donc il fonctionnera très bien indépendamment de ce qu'il y a dedans.
  2. Si l'objet change en interne, ou tourne ou échelles, Flash se réengendrer l'objet chaque image même avec les filtres appliqués. Dans ce cas, avoir des bitmaps à l'intérieur de l'objet sera plus performant que d'avoir des vecteurs complexes (y compris du texte non-périphérique).
  3. Si possible, il est préférable d'appliquer des filtres aux objets enfants qui ne serait pas besoin d'être re-rendu fréquemment, plutôt que de les appliquer à un objet parent qui le ferait.
+0

Merci beaucoup pour la réponse détaillée, cela aiderait beaucoup. Si j'importe le vecteur d'un fichier AI avec lueur. comment cela affecterait le traitement et bien une dernière question. Si les vecteurs ont beaucoup de dégradés? –

+0

Je ne suis pas sûr de ce qui se passe quand vous copiez des choses avec des filtres d'illustrator, mais il sera soit contenu avec un filtre, soit comme un bitmap de ce à quoi ressemble le contenu avec un filtre. Si c'est le premier, il sera possible de changer le filtre dans Flash après l'importation.Quoi qu'il en soit, et indépendamment des dégradés, ma réponse s'applique - les dégradés ralentissent le rendu du rendu, mais si vous utilisez la mise en cache Bitmap et que l'objet n'a pas besoin d'être redessiné, il n'est rendu qu'une seule fois. – fenomas

0

Lot de avec des effets de PNG (ce flou, rougeoie, ombres, etc.) au four en eux presque toujours surperformer le sort d'objets vectoriels avec les mêmes effets appliqués via le code. Si vous ne pouvez pas utiliser les PNG, vous pouvez toujours profiter d'un petit truc ... BitmapData.applyFilter()! Cette méthode est géniale et j'ai réussi à trouver des augmentations de performance significatives dans les mêmes circonstances que vous décrivez. Au lieu d'utiliser des graphiques vectoriels, je vais prendre un instantané bitmap de l'objet vectoriel comme suit:

var vectorGraphic:MovieClip = someVectorObectThatNeedsFiltersAppliedToIt; 
var bmd:BitmapData = new BitmapData(vectorGraphic.width, vectorGraphic.height, true, 0x000000); 
var glow:GlowFilter = new GlowFilter(0x00ffff, 1, 4, 4, 2, 1, false, false); 
bmd.draw(vectorGraphic, null, null, null, null, true); 
bmd.applyFilter(bmd, new Rectangle(0, 0, bmd.width, bmd.height), new Point(0, 0), glow); 
var bmp:Bitmap = new Bitmap(bmd, 'never', true); 

Bonne chance!

+1

ne « cacheAsBitmap » faire exactement la même chose, sans tout le code affiché? – amn

+0

@amn Peut-être que je me trompe mais je ne le pense pas. Le bitmap 'bmp' qui en résulte a une valeur' cacheAsBitmap' de 'false'. Donc, je pense que vous pouvez mettre à l'échelle, faire pivoter et ajuster l'alpha de 'bmp' tout ce que vous voulez sans encourir la surcharge de performance qui vient avec' cacheAsBitmap'. Votre commentaire m'a amené à me deviner alors j'ai regardé la documentation/les forums mais je n'ai rien trouvé qui dise d'une façon ou d'une autre ... – heavilyinvolved

+0

Eh bien, en termes de performances, il semble que l'affichage manuel d'un objet DisplayObject 'BitmapData' comme vous le faites, est la bonne chose en effet, toujours selon les résultats de ces articles racontent: 1. http://www.bytearray.org/?p=117 2. http: //www.bagonca .com/blog/2009/04/17/use-cacheasbitmap-correctement-ou-pas-à-tout/ – amn

Questions connexes