• ベストアンサー

ムービークリッププロパティの変更

こんにちは。 ムービークリップA_mcをロールオーバーした時にムービークリップB_mcを表示ロールアウトした時にムービークリップB_mcを非表示にしたいのです。 まずはムービークリップB_mcの_alphaを100にするスクリプトを記述しようとしています。 B_mcはアニメーションですでに_alpha=0でステージにおかれています。 A_mcに on(rollOver){ _root.B_mc._alpha=100; } on(rollOut){ _root.B_mc._alpha=0; } と記述したのですが、表示されませんでした。 試しにと on(rollOver){ _root.B_mc._visible=true; } on(rollOut){ _root.B_mc._visible=false; } としてもだめでした・・・ すみません。原因がよくわからず対処方法もわかりません・・・何方かご教授頂けないでしょうか? よろしくお願いします。

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

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

#3です。 アップされたファイルを見たのですが原因はわかりませんでした。「flaファイルを見ることができればすぐに解決するのですが。。。」とか言いながら申し訳ないです。下の方の回答で解決されていればよいのですが。。。 ただ、アップされたファイルをちょっといじってみたのですが、スクリプトを全て削除した状態でもアルファの設定がうまく動作しなかったので、う~んという感じです。。。 力になれず申し訳ありません。

amountainblast
質問者

お礼

何度もご協力をいただきありがとうございました。 残念なことに#5さんの回答でも解決できませんでした…無念!!新しいファイルを作り試したら動きましたので,作ったファイルの根本的な問題だということで自己完結しました。今回は違うアニメーションをすることで終わらしておきます。大変勉強になりました。ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (5)

  • DPE
  • ベストアンサー率85% (666/776)
回答No.5

A_mc も B_mc も、ムービークリップですよね。 MovieClip.onRollOver や MovieClip.onRollOut を使ってみてはいかがでしょう。ムービークリップにではなく、フレームアクションとして設定して下さい。  _root.A_mc.onRollOver = function ()  {   _root.B_mc._visible = true;  };  _root.A_mc.onRollOut = function ()  {   _root.B_mc._visible = false;  }; (↑このスクリプトをコピーして使う場合は、行頭の全角のスペースを全て半角のスペースかタブに置き換えて下さい。このまま使うとシンタックスエラーになります) ムービークリップAとBを作り、Bは load イベントを使って _visible を false にして、簡単に実験してみたのですが。 Aに  on(rollOver)  {   B._visible = true;  }  on(rollOut)  {   B._visible = false;  } このようにアクションを設定しても、確かにBは表示されませんでした。 ですが、ロールオーバーイベント自体は検出されているようで、Aにカーソルが乗ると手のカーソルに変わりますし、trace アクションでチェックしてみてもきちんと実行されました。 しかし、このスクリプトを消して、前述のように MovieClip.onRollOver と onRollOut を利用すると、Bは表示されるようになります。 どういう理由でこうなるのかは、よく分からないのですが。。。 もともと、on はボタン向けのアクションだったはずです。 Flash 5 ではムービークリップに on を使ってスクリプトを書くと、エラーになっていました。 これが MX 以降で UI コンポーネント用などに拡張され、ムービークリップに設定してもエラーにはならなくなったのだと思います。 ムービークリップをボタンのように使いたいのでしたら、MovieClip オブジェクトの on*** イベントハンドラを使った方が、無難ではないでしょうか。

amountainblast
質問者

お礼

ご回答ありがとうございました。 なるほどMovieClip.onRollOverとは・・・ こんな関数があったとは…う~ん難しいですねぇ~ しかし残念なことに動きませんでした…試しにと新しいフファイルを作りそこで試してみると動きました…何故???って感じです。何やら作ろうとした物自体が少しおかしいみたいですね…。 今回が違う動きをつけてあきらめます。しかし大変勉強になりました。ありがとうございます。

すると、全ての回答が全文表示されます。
  • mat-21
  • ベストアンサー率56% (91/162)
回答No.4

#1のものです。大変申し訳ありません。 Actioncriptが間違っていました。(Flash拝見させて頂きました)私の説明に間違いがありましたのでお詫びとして完璧にしたいと思います。 まず、現状の内容で動作を解決したいかいと思います。 まず、ステージの最終的に止まっているタイムラインのスクリプトは「this.stop();」以外は削除して下さい。 次に、「B_mc」自身に onClipEvent(load){ this._visible=false; } で「B_mc」を不可視にします。 この時点で「B_mc」は見えないはずです。 次に「A_mc」自身に以下のActionScriptを記述します。 on(rollOver){ mcB=_root.B_mc; if(mcB._visible==false){ mcB._visible=true; } else{ mcB._visible=true; } on(rollOut){ if(mcB._visible==true){ mcB._visible=false; } else{ mcB._visible=false; } これで間違いないかと思います。 一回一回「_root.B_mc」を記述するのが面倒ですし、インスタンス名を変えたときに変数に格納された名前を変えるだけでいいので、変数「mcB」に「_root.B_mc」を格納します。 if~elseは、例えば、もし「rollOver」時に「mcB」が不可視だったら可視にし、可視だったらそのまま可視状態のまま。といった感じです。 以上です。

すると、全ての回答が全文表示されます。
回答No.3

う~ん何なんでしょ(?_?) あと考えられるのは、 ・パスの指定は大丈夫ですか(_rootにB_mcがあるかどうか)? ・B_mcというインスタンス名を他で使用していませんか? ぐらいっすかねー。 ちなみにそれ以外の部分でスクリプトは使ってないですか?もし使ってるとしたら、それが影響してるかもしれないですね。 flaファイルを見ることができればすぐに解決するのですが。。。

amountainblast
質問者

お礼

パスの指定はフラッシュMXのターゲットパスを挿入から選んでいますので、間違えてはいないと思います。 http://www.russ.jp/flash/ にフォルダがinter.lzhがありますので、よかったら見ていただいてもよろしいでしょうか? スクリプトは簡単なものですが、色々な部分で使っていますのでどれが影響しているかまではわからないです・・ 何でもお手数をお掛けして申し訳ございませんが、 よろしくお願いします

すると、全ての回答が全文表示されます。
回答No.2

ステージ上のB_mcのインスタンス名(ムービークリップ名とは別)をB_mcとしてますよね?? あとはB_mcがアニメーションとあるので、実際は表示されているがアニメーションが終了して見えていないだけとか。 on(rollOver){ _root.B_mc._alpha=100; } on(rollOut){ _root.B_mc._alpha=0; } ↑このスクリプトで問題ないので#1さんが仰るように元々のB_mcのアルファの設定が邪魔をしてるのかもしれません。 一度逆の設定(ロールオーバーするとB_mcが非表示で、ロールアウトで表示)などを試して見ると問題が見えてくるかも。

amountainblast
質問者

お礼

早速のご回答、ありがとうございます。 >ステージ上のB_mcのインスタンス名(ムービークリップ名とは別)をB_mcとしてますよね?? インスタンス名をB_mcとしています。 早速試しにとB_mcのアルファの設定をなしにしたのですが、ダメでした… 設定を逆にしても同じでした… rollOverした時に getURLでヤフーに飛ぶようにしたら ちゃんとヤフーが表示されました。 もうなんで??????って感じです 何か他に原因があるのでしょうか? 何度もすみませんが、もう少しご教授の程をよろしくお願いします。

すると、全ての回答が全文表示されます。
  • mat-21
  • ベストアンサー率56% (91/162)
回答No.1

ActionScriptの間違いは無いようですね。 恐らくMovieClipの「B_mc」のどこに「_alpha=0」と記述しているかが問題だと思われます。 「B_mc」の中のフレーム(タイムライン)の「1」に「this._alpha=0;」と記述してあれば、このような問題はないかと思いますが、「B_mc」のクリップ自信に以下のような記述だと質問者の記述ではどうやっても「_alpha=0」のままになります。 onClipEvent(enterFrame){ this._alpha=0; } 上記の記述だと、他のスクリプトから命令されても「_alpha=0」が繰り返し実行しているので、何をやっても「_alpha=0」状態です。 よって、以下のようにやってみてはいかがでしょうか? まず、「B_mc」のMovieClip(ボタンのシンボルでは無いことが条件)自身に onClipEvent(load){ this.visible=false; } そして「A_mc」のButtonClip(ボタンのシンボルもしくはムービークリップのシンボルが条件)自身に on(rollOver){ mcB=_root.B_mc; if(mcB==false){ mcB=true; } else { mcB=true; } } on(rollOut){ if(mcB==true){ mcB=false; } else { mcB=false; } } の感じでいかがでしょう? if~elseを使うのは、ただ単に on(rollOver){ mcB=_root.B_mc; mcB=true; } のみですと、Flashの性質上、再度「rollOver」や「rollOut」すると逆の効果になることがあります。よって、すべての動作に基づく完璧なスクリプトが本来必要ですので、if~elseを使用することをお奨めします。

amountainblast
質問者

お礼

こんにちは、とても親切な回答をありがとうございます。 さっそく試してみましたがダメでした… 試にと on(rollOver){ mcB=_root.B_mc; if(mcB==false){ mcB=true; getURL("http://www.yahoo.co.jp"); } else { mcB=true; } } とifの条件にgetURLを入れるとちゃんとヤフーが表示されました。 b_mcを始めから表示させ、rollOverとrollOutを逆にしても何も変わりません…スクリプト自身は合っていると思いますし、インスタンス名もちゃんと合っています。 何か他に考えられる原因はあるのでしょうか???

すると、全ての回答が全文表示されます。

専門家に質問してみよう