0 votes

Tweening du filtre Pixel Bender en utilisant une valeur numérique avec la classe Tween de base en Actionscript 3.0

J'étudie Pixel Bender. J'ai un filtre dont je veux tweeter le paramètre. Pour autant que je sache, pour tweeter un paramètre de Pixel Bender, je dois tweeter un objet numérique et assigner l'objet numérique tweening comme valeur de tableau pour les données du shader.

J'étais convaincu que ce qui suit fonctionnerait, mais il semble que la classe Number n'ait pas de propriété value, donc je ne sais pas quelle propriété utiliser lors de la création d'un nouveau tween pour l'objet number :

import fl.transitions.*;
import fl.transitions.easing.*

var shader:Shader;
var shaderFilter:ShaderFilter;
var motionTween:Tween;
var tweenNumber:Number = new Number(0.0);
var loader:URLLoader = new URLLoader();

loader.dataFormat = URLLoaderDataFormat.BINARY;
loader.addEventListener(Event.COMPLETE, dataLoaded);
loader.load(new URLRequest("PBFilter.pbj"));

function dataLoaded(e:Event):void
    {
    loader.removeEventListener(Event.COMPLETE, dataLoaded);
    shader = new Shader(e.target.data);
    shaderFilter = new ShaderFilter(shader);
    flower.filters = [shaderFilter];

    motionTween = new Tween(tweenNumber, "value", Bounce.easeOut, 0.0, 100.0, 5, true);
    motionTween.addEventListener(TweenEvent.MOTION_CHANGE, updateFilter);
    }

function updateFilter(e:TweenEvent):void
    {
    shader.data.amount.value = [tweenNumber];
    myMovieClip.filters = [shaderFilter];
    }

3voto

Patrick Points 12559

Peut-être pouvez-vous ajouter un getter et un setter pour votre tweening dans votre classe de test :

//...
public function get amount():Number {
 return tweenNumber;
}
public function set amount(value:Number):void {
 tweenNumber=value;
}
//...
motionTween = new Tween(this, "amount", Bounce.easeOut, 0.0, 100.0, 5, true);
motionTween.addEventListener(TweenEvent.MOTION_CHANGE, updateFilter);
//...

-- ou faire la mise à jour dans votre setter

//...
public function get amount():Number {
 return tweenNumber;
}
public function set amount(value:Number):void {
 tweenNumber=value;
 shader.data.amount.value = [value];
 myMovieClip.filters = [shaderFilter];
}
//...
motionTween = new Tween(this, "amount", Bounce.easeOut, 0.0, 100.0, 5, true);
//...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X