こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ASの条件分岐について

Flash初心者です。

現在、サンプルサイトのスクリプトを参照しながら
意図するアクションを制作しております。

下記がそのスクリプトなのですが、あるインスタンスの
アルファ値をマウスオーバー時に変更すると言った内容です。

onClipEvent (load) {
this._alpha = 100;
}
onClipEvent (enterFrame) {
if (_parent.mOver) {
this._alpha -= this._alpha/8;
} else {
this._alpha += (100-this._alpha)/8;
}
}

現状ですとアルファ値は100% ⇔ 0%で変更されるのですが
これを100% ⇔ 50%の範囲で変更できればと考えてます。
条件式がtrueなら100%→50%へ、falseなら50%→100%へ。

また、どちらの処理にも最後に「/8」と記されていますが
これはどう言った意味をもつのでしょうか?

どなたかご存知でしたら、ご教授いただけると幸いです。
よろしくお願いします。

投稿日時 - 2008-02-13 18:27:50

QNo.3772633

すぐに回答ほしいです

質問者が選んだベストアンサー

まず元のスクリプトの意味を1行ずつ書いておきます。

///////////////////////////////////////////////////////////
// このムービークリップがロード(表示)されたとき
onClipEvent (load) {
// このムービークリップの不透明度を 100 にする
this._alpha = 100;
}

// 1フレーム進む時間ことに毎回実行
onClipEvent (enterFrame) {
// もし親階層の変数 mOver の値が true であれば
if (_parent.mOver) {
// このムービークリップの不透明度を8分の1ずつ引く
this._alpha -= this._alpha/8;
// もし親階層の変数 mOver の値が false であれば
} else {
// このムービークリップの不透明度を100に向けて8分の1ずつ近付ける
this._alpha += (100-this._alpha)/8;
}
}
///////////////////////////////////////////////////////////



> これを100% ⇔ 50%の範囲で変更できればと考えてます。

「親階層の変数 mOver」 がどのようにして出没して,どのように変えられるのかがわかりません。
つまり,
そのスクリプト以外の部分を見ないと,
なぜこのような変なもの(親階層の変数 mOver)が出没するのかという意味がわからないということです。
しかし,
現状でうまく動いているのであれば,
上のスクリプトの

 // このムービークリップの不透明度を8分の1ずつ引く
 this._alpha -= this._alpha/8;

この↑部分を,次の↓ように変えれば良いと思います。

// このムービークリップの不透明度を50に向けて8分の1ずつ近付ける
this._alpha += (50-this._alpha)/8;

変える部分はこれだけです。



======================

> また、どちらの処理にも最後に「/8」と記されていますが
> これはどう言った意味をもつのでしょうか?

「+=」が唯一ActionScriptと呼べるかもしれませんが,
それ以外は ActionScript というより算数ですよ。


「+=」 は加算後代入演算子と言います。

値に数値を持つ a という変数があったとします。

a += 10;

と書いたとするならば,
これは,

a = a + 10;

と同じ意味になります。
もし a に 50 という値を代入したとします。
その a にさらに 10 を加算するという式は次のようになります。

a = 50; ←a に 50 を代入
a += 10; ←a = a + 10 つまり a = 50 + 10

これで,変数 a には 50 + 10 で 60 が代入されます。



後は算数です。

 // このムービークリップの不透明度を100に向けて8分の1ずつ近付ける
 this._alpha += (100-this._alpha)/8;

これは,

 this._alpha = this._alpha + (100-this._alpha)/8;

と同じ意味です。
this._alpha (ムービークリップの不透明度) が 0 (透明)であったとします。

 this._alpha = 0 + (100 - 0)/8;
    ↓
 this._alpha = 12.5;

でムービークリップの不透明度は 12.5 になります。

onClipEvent (enterFrame) { } で1フレーム進む時間ことに毎回実行されるわけですから,
次の瞬間は this._alpha (ムービークリップの不透明度) が 12.5 に加算されます。

 this._alpha = 12.5 + (100 - 12.5)/8;
    ↓
 this._alpha = 23.4375;

次の瞬間は this._alpha (ムービークリップの不透明度) が 23.4375 に加算されます。

 this._alpha = 23.4375 + (100 - 23.4375)/8;
    ↓
 this._alpha = 33.0078125;

という感じで徐々に 100 に近づいて行きます(100には決してなりません)。

もし Excel をお持ちでしたら,
「A1」セルに 「0」 を入力して,
「A2」セルに 「=A1+(100-A1)/8」 を入力して,
「A2」セルの右下のハンドルを下にダラーッとドラッグしてもらうと(オートフィル機能をつかうと),
すぐに結果が見えると思います。
このような数が得られます↓。


0
12.5
23.4375
33.0078125
41.38183594
48.70910645
55.12046814
60.73040962
65.63910842
69.93421987
73.69244238
76.98088709
79.8582762
82.37599167
84.57899272
86.50661863
88.1932913
89.66912989
90.96048865
92.09042757
93.07912412
93.94423361
94.70120441
95.36355386
95.94310962
96.45022092
96.89394331
97.28220039
97.62192534
97.91918468
98.17928659
…以下略…

このような感じで,
今現在の状態から 8分の1 ずつ,アルファ(不透明度)が 100 に近づいて行くということです。
Excel では途中で誤差が丸められて,
170行目を超したあたりで 100 になってしまいますが,実際には 100 にはなりません。
ひたすら 100 に漸近します。
(※ 漸近線という言葉は高校数学で習いますが計算自体は小学算数です。)


もっと早く 100 に近付けたい場合は,
/8 を /7 とか /6 にすれば早く 100 に近づきます。
もっと遅く 100 に近付けたい場合は,
/8 を /9 とか /10 にすれば遅く 100 に近づきます。

投稿日時 - 2008-02-14 19:02:14

お礼

ご丁寧な回答、ありがとうございます。
無事、問題を解決する事ができました!

投稿日時 - 2008-02-19 10:27:04

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

> 値が大きいほど速く変化します。

値が小さいほど速く変化します。
の間違いです。失礼しました。

投稿日時 - 2008-02-14 18:25:59

ANo.1

こんなもんでどうでしょうか
「/8」の部分は思いっきり大雑把に言ってしまうと
alpha値が変化する速度です。
値が大きいほど速く変化します。
上手く説明できないので参考までに・・・


onClipEvent (load) {
this._alpha = 100;
}
onClipEvent (enterFrame) {
if (_parent.mOver) {
if (this._alpha-this._alpha/8 > 50) {
this._alpha -= this._alpha/8;
} else {
this._alpha = 50;
}
} else {
if ((100-this._alpha)/8 >= 0.5) {
this._alpha += (100-this._alpha)/8;

} else {
this._alpha = 100;
}
}
}

投稿日時 - 2008-02-14 12:19:19

あなたにオススメの質問