つい最近知りました。
Tweenerでフィルタ効果が使えるんですねえ(笑)。
フィルタ用のライブラリ(caurina.transitions.properties.FilterShortcuts)をimportして初期化してやるだけ。もっと早く知ってれば、自前でちくちく書かなくてもよかったのに。よく見ればTweenerのヘルプに載ってるし…。
this.stop();
import caurina.transitions.Tweener;
import caurina.transitions.properties.FilterShortcuts;
FilterShortcuts.init();
//title_mc:ブレで登場
Tweener.addTween( title_mc,
{_Blur_blurX:100,_Blur_blurY:0,
_Blur_quality:2,time:0, transition:”linear”});
Tweener.addTween( title_mc,
{_Blur_blurX:0,_Blur_blurY:0,
_Blur_quality:2,time:1.5, transition:”easeOutCubic”,onComplete:goNext});
this.gotoAndPlay(this.currentFrame+1);
ちなみにカラーをいじる場合は、ColorShortcutsを同じように使います。
import caurina.transitions.Tweener;
import caurina.transitions.properties.ColorShortcuts;
{_tintBrightness:0,time:2,transition:”easeOutQuad”,onComplete:goNext});
下記のサイトを参考にさせていただきました。
ある人に「MovieClipに選択表示の枠線つけるのってどうすればいいか?」と聞かれて、「フィルタでやればいいのでは?」といっていろいろいじってたときに発見。プロパティタブにあるフィルタは「グラデーショングロー(GradientGlowFilter)」だけど、スクリプトにはそれとは別に「グロー(GlowFilter)」があったのね。何でプロパティパネルにないんだろう?
で、あるサンプルを見て単にnewしてるだけで不思議に思ったら、コンストラクタに初期値があるんですね。値を設定しないで使うという発想がなかったので、気づかなかった。
で、枠線をつけるためのスクリプトサンプルはこちら。ちなみにグローとグラデーショングローでは、色、アルファ値のプロパティ名が微妙に違いますのでご注意。これはグローを使っています。
btn_glow.addEventListener(MouseEvent.CLICK, onSetFilterglow);
function onSetFilterglow(event:MouseEvent):void {
//—枠線設定(グロー)
var c:uint=0x00FF00;
var a:Number=1;
var bX:Number=6;
var bY:Number=6;
var st:Number=10;
var filterglow:GlowFilter=new GlowFilter(c,a,bX,bY,st);
//枠線適用
mymc.filters = [filterglow];
}
フィルタをいじっていて、加算するときはどうするのかと疑問が。例えば0〜30までblurをかけるときは、数値(下記の場合はval_x, val_y)を可変にして・・・
var filter:flash.filters.BlurFilter = new flash.filters.BlurFilter();
filter.blurX = val_x;
filter.blurY = val_y;
filter.quality = 1;
mc.filters = [filter];
を繰り返せばいいのだけれど、既に設定されているblurに対して加算する場合はどうするか?それに・・・
mc.filters = [filter];
だとblur以外のフィルタが設定されていた場合は消えてしまうわけだし。で、考えてみた関数がコレ。
//ぼかし処理(加算)
function xAddFilter_blur(mc:MovieClip,val_x:Number,val_y:Number):void {
var array_filter:Array = mc.filters;
var exist_blur:Boolean = false;
var filter:flash.filters.BlurFilter;
for (var i:int = 0; i<array_filter.length; i++) {
var wObj_filter:Object = array_filter[i];
if (wObj_filter is BlurFilter) {
exist_blur = true;
var current_blur:Number = isNaN(wObj_filter.blurX) ? 0:wObj_filter.blurX;
filter = new flash.filters.BlurFilter();
filter.blurX = current_blur + val_x;
filter.blurY = current_blur + val_y;
filter.quality = 1;
array_filter.splice(i,1);
array_filter.push(filter);
mc.filters = array_filter;
break;
}
}
if (! exist_blur) {
filter = new flash.filters.BlurFilter();
filter.blurX = current_blur + val_x;
filter.blurY = current_blur + val_y;
filter.quality = 1;
array_filter.push(filter);
mc.filters = array_filter;
}
}
mc.filtersの中にあるフィルタの種類をどうやって判断するのかな〜と考えていたら、is がありましたね。AS2.0なら instaceof。
if (wObj_filter is BlurFilter) {
あとは他のフィルタを上書きしないことと、BlurFilterがない(設定されていない)場合を考慮すればOK。
AS,Objective-C,Javascript,その他諸々の備忘録