電子書籍の厳選無料作品が豊富!

if文で条件判定をして、scという変数の数字を入れ替えたく、以下のようなスクリプトを書いたのですが、ほとんど同じ処理の繰り返しなので、for文などで、もっと簡単に書けるでしょうか?
Actionscript3.0です。
かなり悩んでいるのですが、答えが見つからないのでお願いします。

if (mY>pos*0&&mY<pos*1) {
sc=1;
scale_mc1.alpha=1;
scale_mc2.alpha=0;
scale_mc3.alpha=0;
scale_mc4.alpha=0;
scale_mc5.alpha=0;
scale_mc6.alpha=0;
scale_mc7.alpha=0;
scale_mc8.alpha=0;
scale_mc9.alpha=0;
scale_mc10.alpha=0;
} else if (mY>pos*1&&mY<pos*2) {
sc=2;
scale_mc1.alpha=0;
scale_mc2.alpha=1;
scale_mc3.alpha=0;
scale_mc4.alpha=0;
scale_mc5.alpha=0;
scale_mc6.alpha=0;
scale_mc7.alpha=0;
scale_mc8.alpha=0;
scale_mc9.alpha=0;
scale_mc10.alpha=0;
} else if (mY>pos*2&&mY<pos*3) {
sc=3;
scale_mc1.alpha=0;
scale_mc2.alpha=0;
scale_mc3.alpha=1;
scale_mc4.alpha=0;
scale_mc5.alpha=0;
scale_mc6.alpha=0;
scale_mc7.alpha=0;
scale_mc8.alpha=0;
scale_mc9.alpha=0;
scale_mc10.alpha=0;
} else if (mY>pos*3&&mY<pos*4) {
sc=4;
scale_mc1.alpha=0;
scale_mc2.alpha=0;
scale_mc3.alpha=0;
scale_mc4.alpha=1;
scale_mc5.alpha=0;
scale_mc6.alpha=0;
scale_mc7.alpha=0;
scale_mc8.alpha=0;
scale_mc9.alpha=0;
scale_mc10.alpha=0;
} else if (mY>pos*4&&mY<pos*5) {
sc=5;
scale_mc1.alpha=0;
scale_mc2.alpha=0;
scale_mc3.alpha=0;
scale_mc4.alpha=0;
scale_mc5.alpha=1;
scale_mc6.alpha=0;
scale_mc7.alpha=0;
scale_mc8.alpha=0;
scale_mc9.alpha=0;
scale_mc10.alpha=0;
} else if (mY>pos*5&&mY<pos*6) {
sc=6;
scale_mc1.alpha=0;
scale_mc2.alpha=0;
scale_mc3.alpha=0;
scale_mc4.alpha=0;
scale_mc5.alpha=0;
scale_mc6.alpha=1;
scale_mc7.alpha=0;
scale_mc8.alpha=0;
scale_mc9.alpha=0;
scale_mc10.alpha=0;
} else if (mY>pos*6&&mY<pos*7) {
sc=7;
scale_mc1.alpha=0;
scale_mc2.alpha=0;
scale_mc3.alpha=0;
scale_mc4.alpha=0;
scale_mc5.alpha=0;
scale_mc6.alpha=0;
scale_mc7.alpha=1;
scale_mc8.alpha=0;
scale_mc9.alpha=0;
scale_mc10.alpha=0;
} else if (mY>pos*7&&mY<pos*8) {
sc=8;
scale_mc1.alpha=0;
scale_mc2.alpha=0;
scale_mc3.alpha=0;
scale_mc4.alpha=0;
scale_mc5.alpha=0;
scale_mc6.alpha=0;
scale_mc7.alpha=0;
scale_mc8.alpha=1;
scale_mc9.alpha=0;
scale_mc10.alpha=0;
} else if (mY>pos*8&&mY<pos*9) {
sc=9;
scale_mc1.alpha=0;
scale_mc2.alpha=0;
scale_mc3.alpha=0;
scale_mc4.alpha=0;
scale_mc5.alpha=0;
scale_mc6.alpha=0;
scale_mc7.alpha=0;
scale_mc8.alpha=0;
scale_mc9.alpha=1;
scale_mc10.alpha=0;
} else if (mY>pos*9&&mY<pos*10) {
sc=10;
scale_mc1.alpha=0;
scale_mc2.alpha=0;
scale_mc3.alpha=0;
scale_mc4.alpha=0;
scale_mc5.alpha=0;
scale_mc6.alpha=0;
scale_mc7.alpha=0;
scale_mc8.alpha=0;
scale_mc9.alpha=0;
scale_mc10.alpha=1;
}

A 回答 (2件)

#1の方、惜しいけど若干違いますかね。


this["scale_mc"+i].alphaのように配列アクセス演算子をつかって
子ムービークリップやプロパティを参照できますので

for(var i:int=1; i<=10; i++){
if(mY>pos*(i-1)&&mY<pos*i){
sc=i;
for(var j:int=1; j<=10; j++)this["scale_mc"+j].alpha=(i==j)?1:0;
}
}

#1の方よりちょっと縮めてありますし、個数が増加しても汚くなりにくくなっているつもりです。
私はas2.0使うことのほうが多いのでところどころ混ざってるかもしれません・・・^^;
    • good
    • 0
この回答へのお礼

動きました!
プログラムは奥が深いですね。とてもエレガントです!!
演算子==と、演算子?は知らなかったので、これも勉強になりました。
ありがとうございました。

お礼日時:2009/04/06 16:56

まず、10個の変数に全て0を入れておいてから、


判定して必要なところに1を入れたら80行は
減少しますね。

私もFlash初心者(3時間)ですが、Flashは動的
に変数名を作成できるのでfor文で必ず回せます。
というか、配列にしておけば簡単なので、設計の
問題かも。

scale_mc1.alpha=0;
scale_mc2.alpha=0;
scale_mc3.alpha=0;
scale_mc4.alpha=0;
scale_mc5.alpha=0;
scale_mc6.alpha=0;
scale_mc7.alpha=0;
scale_mc8.alpha=0;
scale_mc9.alpha=0;
scale_mc10.alpha=0;

for(ver i=1; i<=10; i++){
if(mY>pos*(i-1)&&mY<pos*i){
sc=i;
*1変数名を生成=1;
}
}
*1 多分なのですが
("scale_mc"+i+".alpha")
ではないか、と思います。
まだ文法も把握しきっていないので間違い
なら失礼します。
    • good
    • 0
この回答へのお礼

なるほど!
変数の使い方にコツがあるのですね。
("scale_mc"+i+".alpha")は、動きませんでした。。。

お礼日時:2009/04/06 16:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!