Posts Tagged “actionscript”

配列の要素から番号を返す関数

こんなんでいいのかな。車輪の再開発っぽいことになってしまう気がする。。

function getArrNum(target:String, array:Array):String {
for (var prop in array) {
if (target == array[prop]) {
return prop;
}
}
}

↑が関数で、使う場合はこんな感じ。

var a:Array = new Array("aaa", "bbb", "ccc");
trace(a); //結果:aaa,bbb,ccc
trace(a[0]);//結果:aaa
trace(getArrNum("bbb", a));//結果:1

もっとスマートなやり方があったら教えてくださいませ。

FLVPlayback(AS2)をカスタマイズしてシークバー周辺を便利に

コンポーネントのFLVPlaybackをそのまま使うと、シークバー自体をクリックしてシークするという機能がありません。つまみをドラッグしてシークするしかないので、不便です。しかも、現在再生しているのが全体のどの辺かを知るにはつまみの位置を見るしかなく、色で一瞬で判断できるわけでもありませんでした。

それをカバーしたのがこのサンプルです。シークバーを押すと、押された箇所の_xmouseを取得して、全体の位置とクリックされた位置の割合を計算して、その場所にシークする、という流れです。

//
//シークバーの幅を決定し、クリックシークを設定
SeekBar.onRelease = function() {
flvpb.seek(Math.floor(this._xmouse*(sbw/100)*flvpb.totalTime)/sbw);
};

久しぶりに意味があるエントリになったと思います。素材ひとまとめにしたのはこちら。(ver8 .fla形式 zipでどうぞ)

ちなみに。
上記のサンプルFLVはこちらからお借りしました。サンプルビデオをダウンロードできますよ。

ステージ上の全てのmcを一瞬で止める、動かすactionscript

ステージ上のすべてのmcを制御したいと思うことがよくあります。

ボタンを押すと小窓が出て、ちょこまかうごいていたmcが一瞬で止まるという動きです。全てのmcの名前を知っていて、_root.a1_mc.stop();_root.a2_mc.stop();…なんてやってたらキリがないので、こういうやりかたはどうでしょう。

var aArr:Array = new Array();
a_btn.onRelease = function() {
for (var mc in _root) {
aArr.push(mc);
}
for (var i:Number = 1; i < aArr.length; i++) {
eval(aArr[i]).stop();
}
};

配列aArrにステージ上(ここでは_root)のオブジェクトを全て書き出して、stringとして名前を取得。それをaArrの長さだけ(aArr[0]は_rootだから1から)ループさせながらeval(aArr[i])とすればmcを扱っているのと同じ、というわけ。

UNIQLOのサイトみたいに、たくさんのボタンmcがあって、クリックすると商品の説明が表示される仕組みの場合、ひとつの説明を出している間はほかのボタンを押させたくないことがよくあります。そういうときはこれで、_rootじゃなくても必要なmc内のインスタンスを取得して、_enabled=false、と指定してやればいいんじゃないかな。

もっとスマートなやり方があったら教えてください。