[as3 - cs4] motion blur effect

Soyez le premier à donner votre avis sur cette source.

Vue 7 364 fois - Téléchargée 827 fois

Description

Classe pour pouvoir faire très facilement un effet de flou de vitesse sur toute votre scène (ou partiellement), réalisée en AS3.
Ici le principe est simple : mixer les X dernières images rendues entre elles, rendant une impression de flou de vitesse, ce nombre d'images X est réglable.
Une deuxième méthode est disponible : mixer l'image actuelle avec une autre image qui est elle même un mix des dernières images rendues à l'écran. Cette deuxième méthode est moins couteuse en calcul, mais le rendu est légèrement différant... A vous de choisir ce qui vous convient le mieu.

3 exemples d'utilisation fournits:
Main.swf - simple rond dirigé par la souris.
PhysicExemple.swf - plusieurs ronds rebondissent sur les bords de la fenêtre.
GifExemple.swf - Application de l'effet sur des clips animés (l'animation n'est pas de moi)
Note:Les 3 exemples utilise la deuxième méthode de motion blur.

A savoir : Le motion blur permet de donner une impression de fluidité quand le FPS d'une animation tend vers des valeurs plutôt faibles.
Inconvénient de cette technique : L'effet de flou va dépendre du FPS de votre animation. Plus elle tournera lentement, plus l'effet donnera une impression de grandes trainées.

Source / Exemple :


Comment utiliser l'effet? 3 lignes.

import stefbuetFX.MotionBlur;

var mbEffect:MotionBlur=new MotionBlur(this, 5, stage.stageWidth, stage.stageHeight);
addEventListener(Event.ENTER_FRAME, mbEffect);
addChild(mbEffect);

Variante pour utiliser la deuxième méthode:
var mbEffect:MotionBlur=new MotionBlur(this, 0, stage.stageWidth, stage.stageHeight, true, 0.5);

Conclusion :


MotionBlur(rootNode:DisplayObject, samples:uint, width:uint, height:uint, useCostlessMethode:Boolean=false, persistance:Number=0.5) : Constructeur
rootNode : Sur quel objet appliquer le flou? la racine permet de prendre en compte toute la scène.
samples : Nombre d'images à utiliser dans le buffer.
width & height : dimensions de l'effet. Si vous ne savez pas quoi mettre, laisser les dimensions de la fenetre.
useCostlessMethode : envoyer true pour utiliser la deuxième méthode de rendu moins couteuse en calculs. Désactivé par Default.
persistance: Si deuxième méthode utilisée, facteur de transparence des rendus lors de leur mélange avec les précédents rendus, entre 0 et 1 (0 = pas de flou, 1 = flou max)

update(e:Event=null):void
peut être appelé manuellement ou par un écouteur d'evenement.
Permet de mettre à jour l'effet.

drop():void
Vide la mémoire.
Attention, n'utilisez plus l'effet après avoir utilisé cette méthode!

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
576
Date d'inscription
mercredi 5 janvier 2005
Statut
Membre
Dernière intervention
12 mai 2009

Tu parles peut être de :
addEventListener(Event.ENTER_FRAME, mbEffect.update);

Je ne vois pas le problème. Un bitmapData est créé à chaque rendu tandis que le précèdent est déchargé de la mémoire. Il n'y a pas de fuite de mémoire.
Messages postés
1375
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011

addEventListener(Event.ENTER_FRAME, mbEffect);
Messages postés
576
Date d'inscription
mercredi 5 janvier 2005
Statut
Membre
Dernière intervention
12 mai 2009

Salut,
Je vois pas. Fichier & Ligne stp.
Messages postés
1375
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011

Hello,

Source sympa.
J'ai pas pris le temps de regarder le code mais une chose m'a tappé a l'oeil dans ton code sample :
Tu crées un new object tout le temps via l'event ENTER_FRAME !!! c'est pas très bon cela pour les ressources CPU.

A+
Messages postés
576
Date d'inscription
mercredi 5 janvier 2005
Statut
Membre
Dernière intervention
12 mai 2009

En fait cela dépend du PC cible sous lequel tourne l'animation. Plus il est rapide, moins le flou sera visible. C'est le problème de cette technique. Après il faut essayer de jouer en temps réel sur le nombre d'images du buffer (dans le cas de la 1er méthode) ou le coefficient de persistance du buffer (dans le ème cas) pour avoir à peu près la même chose partout.
Afficher les 9 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.