• ベストアンサー
  • すぐに回答を!

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」と記されていますが これはどう言った意味をもつのでしょうか? どなたかご存知でしたら、ご教授いただけると幸いです。 よろしくお願いします。

共感・応援の気持ちを伝えよう!

  • 回答数3
  • 閲覧数61
  • ありがとう数1

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

  • ベストアンサー
  • 回答No.3

まず元のスクリプトの意味を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 に近づきます。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

関連するQ&A

  • 角度を指定して回転

    スクリプト1 //////////////////////////////////////////////////////////////// onClipEvent (load) { this.x_rotation = 0; d = 1; } onClipEvent (enterFrame) { this._rotation = _rotation += d; if (this._rotation>=90 || this._rotation<=0) { d = -d; } } //////////////////////////////////////////////////////////////// スクリプト2 //////////////////////////////////////////////////////////////// onClipEvent (load) { this.x_rotation = 0; } onClipEvent (enterFrame) { this._rotation = _rotation += 1; if (this._rotation>=90) { this._rotation = -1; } } //////////////////////////////////////////////////////////////// これは、MCが0度~90度の範囲で行ったり来たりするscriptです。 正常に動かないというわけではありませんが、スクリプト2では、90度に達した後いきなり0度に戻ってしまいます。 90度に達したら80度、70度と0度まで戻って欲しいのです。 なぜdを使うのか、スクリプト2ではダメなのかいまいちよく分かりません。 理由と考え方を教えてください。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • 立体回転運動 新たにボタンを作って一定角度だけ動かす

    お世話になります。 下記のプログラムは3Dのぐるぐる回るプログラムなのですが、 onClipEvent (load) { degree = 0; r = 100; centerx = 150; centery = 100; } onClipEvent (enterFrame) { radian = Math.PI/180*degree; this._x = centerx+r*Math.cos(radian); this._y = centery+r*Math.sin(radian)/2; this._xscale = this._yscale=this._alpha=this._y; degree += 5; } -------------------------------------------------------------------- それで、ここからなのですが、 onClipEvent (enterFrame) {  --省略-- degree += 5;  ↓ のところをまず削除して、新たにボタンを作って、そのボタンを押すと、 押すたびにある一定の角度分だけ円運動するようにしたいのですが、どうしたらいいんでしょうか? 単純にボタンを作って、 そこに on(release) { degree +=5; } と書いてもまともに動きません。 初心者なものなので、よろしくお願いします。 それと、このプログラムはムービークリップに記載されているのですが、出来たらルート画面のレイヤーにactionを作って、そこにスクリプトをまとめて書きたいと思うんですが、どうしたらいいんでしょうか?ムービークリップにインスタント名をつけて、上記のプログラムの前に、 ムービークリップインスタント名.onClipEvent (load) { --省略-- } ムービークリップインスタント名.onClipEvent (enterFrame) { --省略-- } としたら、フィールド名がありませんとエラーが出てしまいます。 長くなってしまいましたが、わかりずらい説明かとは思うのですが、重ねてよろしくお願いします。

  • FlashMX フェードアウト

    以前、教えていただいた フェードインするスプリクト onClipEvent (load) { _alpha = 0; } onClipEvent (enterFrame) { _alpha += 1; } このあと、フェードアウトしたいのですが     どのようにしたらよいのか教えて下さい。 それと モーショントゥーインでの    フェードイン→フェードアウトのさせかたも            教えて下さい お願いします。 (FlashMX OS2000です)

    • ベストアンサー
    • Flash

その他の回答 (2)

  • 回答No.2
  • an631
  • ベストアンサー率82% (28/34)

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

共感・感謝の気持ちを伝えよう!

  • 回答No.1
  • an631
  • ベストアンサー率82% (28/34)

こんなもんでどうでしょうか 「/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; } } }

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • コピペで持ってきたのにasが働かない?

    円グラフがあり、グラフが進んで表示されるていく順に説明の吹き出しが4つボヨンとでて最後に大きな吹き出しがボヨンとでるのがあり、吹き出しの内容を変え、無事動いたのですが、他のアニメの後にそれを入れようとしてコピベすると、4つの吹き出しがでないのです。ルートがおかしいかと思い、新規ファイル、シーンに丸ごと、「すべてのフレームを選択」でもってきても、4つの吹き出しがでなくなる。どうしてでしょう?(元もシーンにある)ASはそのまま、フレームラベルもそのままなのに。 シーンの円グラフMCに onClipEvent(load){ stoptime = getTimer(); waittime = 4500; } onClipEvent(enterFrame){ if (getTimer() >= stoptime + waittime) { for (i=1; i<=4; i++){ mc = "MC_fukidasi" + (i); _root[mc].targetScale = 0; } _root.gotoAndStop("scene2"); } } 円グラフMCの中、吹き出しのタイミングでMC1~4番号替え _root.MC_fukidasi1.flag = true; シーンの吹き出し1~4それぞれ onClipEvent(load){ targetscale = this._xscale; nowscale = 0; this._xscale = this._yscale = this._alpha = nowscale; decay = 0.6; speed = 0.3; flag = false; } onClipEvent(enterFrame){ if (flag == true){ nowscale = nowscale * decay + (targetScale - this._xscale) * speed; this._xscale = this._yscale = this._alpha += nowscale; } } 大きな吹き出しMCに、flagなしのボヨンとでるas 上のフレームラベル「scene2」 アニメの説明の為に、アニメの後ろこれを入れたいので、どうしたらいいのかわかりません。 スクリプトが判らないので何か方法はないでしょうか?

    • ベストアンサー
    • Flash
  • parafla 関数が呼ばれない

    onClipEvent (load) { hoge (); } - onClipEvent (enterFrame) { hoge (); } function hoge () { trace ("hoge"); } この場合、 onClipEvent (load) 内から呼び出した独自関数が呼び出されません。 onClipEvent (enterFrame) 内では正しく呼び出されます。 どうしてですか?

  • アクションスクリプトでのフレーム移動について

    FlashCS3 actionscript2.0で画像が1枚ずつフェードインしてきてサムネイル一覧になるようなものを作っています。 それぞれの写真をレイヤーに分けていれ、ラベルをつけています。 全ての写真インスタンスに飛び先のラベル名だけど変更して、下記のようにアクションスクリプトを記述しました。 ―――――――――――――――――――――――――――――― onClipEvent (load) { this._alpha = 0; } onClipEvent (enterFrame) { if(this._alpha < 100){ this,_alpha += 2; } if(this._alpha >= 80){ _root.gotoAndStop("pic02"); } } ―――――――――――――――――――――――――――――― が、1つめの写真と2つめの写真はフェードインしてきて表示されるのですが、3つめの写真以降が読み込まれません。 ラベルの番号をずらすと、その一の写真は読み込むのですが、次のラベルにはジャンプしてくれません。 原因が分かる方がいらっしゃいましたら、ぜひおしえてください。 よろしくおねがいします。

    • ベストアンサー
    • Flash
  • フェードイン、フェードアウトの「オバーラップ」について

    flash初心者です。 AS2.0です。よろしくお願いいたします。 ボタンでムビークリップを切り替える時、 フェードイン、フェードアウトの「オバーラップ」に したいのですが。 (A_mcがフェードアウトする同じタイミングで B_mcがフェードインする) ムービークリップが大量にあるので ムービークリップそれぞれに同一のスクリプトで フェードイン、フェードアウトを設定して効率化 したいと考えています。 フェードインは onClipEvent (load) { this._alpha = 0; } onClipEvent (enterFrame) { if (this._alpha<100) { this._alpha += 2; } } のようなスクリプトで実現できたのですが フェードアウトがわかりません。 ※イメージの関係でフェードアウトがどうしても必要になりました。 onClipEvent (unload) { } のようなタイミングで制御できればと 考えているのですが 具体的にアドバイスいただると助かります よろしくお願いいたします。

  • suzukaでのアルファ値操作

    flash作成ソフトsuzukaについてのご質問です。 どなたかよろしくお願いいたします。 外部jpg画像をムービークリップに読み込み、 フェードイン後 30秒停止し、フェードアウトを 行いたいのですが、方法がわからずつまづいています。 setInterval関数 か setTimeout関数のどちらかを使うのだろうなと いうぐらいまでしかわからない程の知識です。 ご指導のほど、よろしくお願いいたします。 ---------------------------------------------- // このムービークリップが読み込まれたら onClipEvent (load) { // このアルファを 30 にする this._alpha = 30; } // 1フレーム進む時間ごとに毎回実行 onClipEvent (enterFrame) { // もしこの アルファ が 100 より小さいとき if (this._alpha<100) { // このアルファを 3 加算する this._alpha += 3; // それ以外の場合(アルファ100以上) } else { // このアルファを 100 で固定 this._alpha = 100; } } ------------------------------------------ 上記のスクリプトは問題なく動作します。 上記のスクリプトのアルファ値が100に到達してから 30秒後動作する下記の内容をプラスしたいのですが、 ----------------------------------------- // もしこの アルファ が 0 より大きいとき if (this._alpha>0) { // このアルファを 3 減算する this._alpha -= 3; // それ以外の場合(アルファ0以下) } else { // このアルファを 0 で固定 this._alpha =0;} ----------------------------------------- どなたかアドバイスをよろしくお願いいたします。

    • ベストアンサー
    • Flash
  • Flashでボタンをクリックするとフェードイン、フェードアウトする

    アクションスクリプト初心者なのですが、 スクリプトで、ボタンをクリックすると 現在のフレームのムービークリップがフェードアウトしながら、 次のページのムービークリップがフェードインする方法を ご存知でしたら、教えていただけないでしょうか。 ムービークリップがロードしたら、 フェードインするところまでは出来たのですが、 それだと、現在のムービークリップがフェードアウトしないので 困っています。 ムービークリップがロードしたら、 フェードインするスクリプトは、 onClipEvent (load) { _alpha = 0; } onClipEvent (enterFrame) { _alpha += 2; } と記載しております。 どうぞよろしくお願いします。

    • ベストアンサー
    • Flash
  • ムービークリップの領域をシェイプの形状にしたい

    よろしくお願い致します。 ムービークリップにマウスオーバーするとムービークリップが再生し、マウスアウトすると逆再生するというものを作っています。 ここで、ムービークリップのマウスオーバーする領域を矩形ではなく、見たままの形(シェイプの形状)だけに指定するにはどうすれば良いでしょうか? 現在の状況は、マウスオーバーさせるムービークリップに onClipEvent (load) { this.stop(); } onClipEvent (enterFrame) { if (this.hitTest(_root._xmouse, _root._ymouse, false)) { this.nextFrame(); } else { this.prevFrame(); } } のアクションを書いています。 自分なりに調べたところ、「shapeFlag?というものを使うらしい?」というのは分かったのですが、どう使えば良いのかさっぱり分かりません・・ どなたかご指導頂けないでしょうか。 どうぞよろしくお願い致します。

    • ベストアンサー
    • Flash
  • flash as2.0 hitTest()について

    FLASHMXで作業をしています。 mcが壁に当たると反対方向にmcを移動させたいのですが 以下では、うまくいきません。理由がわかりませんし打開策も わかりません。解決策を教えてください。よろしくお願いいたします。 onClipEvent(load){ this._x=100; this._y=380; } onClipEvent(enterFrame){ this._y -=3; if(_root.tama_mc.hitTest(_root.kabe_mc)==true){ this._y +=5; } }

  • アクションスクリプトでイージング

    Flash初心者です。 お聞かせ願いたいのですが、トゥイーンで設定できる イージングのような動きを、スクリプトで制御したく 思っているのですが、方法が分からずにいます。 下記のように、指定したX座標へ移動させる際に イージングを適用させたいのですが、どこにどのような スクリプトを追記すればよろしいでしょうか? onClipEvent (load) { theX = 0; } onClipEvent (enterFrame) { this._x += (theX-this._x)/5; } ご存知の方がおられましたら、回答いただければ幸いです。 よろしくお願い致します。

    • ベストアンサー
    • Flash
  • ActionScriptで、指定した時間後に次のアクションのとり方

    例えば2秒後に次の行動を取りたい時の質問をしたいのですが、 ある画像を下からフェードインしながら現れて、停止し2秒後にフェードアウトするというアニメーションをActionnScriptで作りたいのですが、 現在は下記のようにスクリプトを組んで、下から上にフェードインしながら画像を読み込むところまではできたのですが次の2秒後にフェードアウトするというのができません。 setIntervalを使うといいのは知っているのですが、それを下記のスクリプトにどのように組んだらできるのでしょうか? わかる方がいたら教えてください、よろしくお願いします。 swfのサイズはw:300、h:100です、ステージにMovieClipを一つ置いてそれに下記のスクリプトを書き込んでいます。 ------------------------------------------------------------------- onClipEvent (load) { this.createEmptyMovieClip("img_load_mc",1); img_load_mc.loadMovie("画像URL"); this._alpha = 0; this._x = 0; this._y = 100; } onClipEvent (enterFrame) { this._alpha += 5; this._y -= 5; if(this._y <0) { this._y = 0; } } ------------------------------------------------------------------- ちなみに作成環境はFlash8 ProでActionScript2.0で作成しています。 よろしくお願いします。

    • ベストアンサー
    • Flash