• ベストアンサー

Flash クリックしたらインスタンスを透明にする

Flash8を使っています。 アクションスクリプトは初心者です。 ステージの上に△や□のインスタンスを配置して、クリックしたら、アルファを0にして透明に、もう一度クリックしたらアルファを100に戻す。 そして、ステージ上のどこかにResetボタンを作っておいて、クリックしたら、すべてのインスタンスのアルファを100にして不透明にする。 どう書けばいいのでしょうか? 教えてください。 初心者向きにお願い致します。

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

  • ベストアンサー
noname#35109
noname#35109
回答No.1

この説明では, 「アルファを 0⇔100 に切り換える "3つの" インスタンスがあった場合」 について回答します。 > ステージの上に△や□のインスタンスを配置して まず, ボタンシンボルのインスタンスでも, ムービークリップのインスタンスでもかまいませんから, とりあえず _root(メインムービーのステージ上)に, アルファを 0⇔100 に切り換えるインスタンスを配置してください。 そして,それぞれのインスタンスにインスタンス名を付けてください。 それぞれのインスタンスに付けるインスタンス名ですが, 「任意のアルファベット+連番数字」という名前にしておくとスクリプトが簡単になります。 この説明では,各3つのボタン(ムービークリップでも可能)に, 「myButton0」,「myButton1」,「myButton2」というインスタンス名を付けたとしておきます。 myButton0 に書くスクリプト(コピペ可能) --------------------------------------- on (release) { // もし myButton0 のアルファが 100 であれば if (_root.myButton0._alpha == 100) { // myButton0 のアルファを 0 にする _root.myButton0._alpha = 0; // それ以外は } else { // myButton0 のアルファを 100 にする _root.myButton0._alpha = 100; } } -------------------------------------- これで, > クリックしたら、アルファを0にして透明に、 > もう一度クリックしたらアルファを100に戻す。 というスクリプトが完成です。 日本語で書かれてある文章とほとんど同じですね。 myButton1 に書くスクリプトも書いておくと, -------------------------------------- on (release) { // もし myButton1 のアルファが 100 であれば if (_root.myButton1._alpha == 100) { // myButton1 のアルファを 0 にする _root.myButton1._alpha = 0; // それ以外は } else { // myButton1 のアルファを 100 にする _root.myButton1._alpha = 100; } } -------------------------------------- となります。 myButton? が 100 個以上あったとしても, 同じ要領で書いて行けば良いのです。 > そして、ステージ上のどこかにResetボタンを作っておいて、 > クリックしたら、すべてのインスタンスのアルファを100にして不透明にする。 この説明では「myButton0」,「myButton1」,「myButton2」の3つしかありませんから, いちいち, -------------------------------------- on (release) { // myButton0 のアルファを 100 にする _root.myButton0._alpha = 100; // myButton1 のアルファを 100 にする _root.myButton1._alpha = 100; // myButton2 のアルファを 100 にする _root.myButton2._alpha = 100; } -------------------------------------- と書いてもかまいませんが, もっと数が増えると面倒ですから, [ ](配列アクセス演算子) を使って, for文で一気にアルファを 100 にするにするのが普通です。 上のいちいちアルファを 100 にするスクリプトを for 文で書き直すと次のようになります。 -------------------------------------- on (release) { // 変数 i=0 に 1 ずつ加算して i が 2 になるまでループ for (var i = 0; i<=2; i++) { // myButton? のアルファを 100 にする _root["myButton"+i]._alpha = 100; } } -------------------------------------- これだと, i<=2; の部分を変えるだけで,100個でも200個でも一気にアルファを 100 にリセットできます。これを使うために, インスタンス名を 「任意のアルファベット+連番数字」 という名前にしておいた方が良いと思います。 だいたい上のような感じで良いと思います。 まず,上のようなことを単品ずつ考えられるようにしてください。 ◎関連URL(参考になることがあるかも) 「if if else 文 - FLASHアクションスクリプト入門編」 http://isvalid.jp/actionscriptLab/ASlesson/actionsctipt_if.html 「繰り返し文 for - FLASHアクションスクリプト入門編」 http://isvalid.jp/actionscriptLab/ASlesson/actionsctipt_for.html 「if条件ステートメント、条件式」 http://www.1art.jp/flash/le/lesson23/lesson23.htm 「forステートメント」 http://www.1art.jp/flash/le/lesson36/lesson36.htm ////////////////////////////////////////////////////////////// >> 初心者向きにお願い致します。 と書かれていますが, ご質問の文章を見た感じ,「インスタンス」や「アルファが0」など, ちゃんとした言葉を使われていますし, 私は質問者さまの考えたプログラムを Flash にコード化しただけです。 プログラミングの大半は,ご質問の文章自体ですでに終わっています。 とても,初心者の方とは思えないので, 次はさらに手抜きというかメンテナンスを楽にする方法を一応書いておきます。 余談だと思ってください。 この方法では,リセットボタンにもインスタンス名を付けます。 この説明では,「resetButton」という名前にしておきます。 そして, 「myButton0」,「myButton1」,「myButton2」,「resetButton」 の各スクリプトは全て削除しておきます。 インスタンスにはスクリプトを何も書かないということです。 そして, 「myButton0」,「myButton1」,「myButton2」,「resetButton」が全て存在する_rootのフレーム (1フレーム しかなければ フレーム1 )に次のように書けば, 上の /////// より上と同様のものができます。 ------------------------------------------------ // myButton の 個数を指定(※可変:ここだけ変える) var myButtonNum = 3; //- - - - - - - - - - - // for 文でそれぞれのインスタンスの onRelease function を定義 for (var i = 0; i<=myButtonNum-1; i++) { _root["myButton"+i].onRelease = function() { // もし 自分自身の名前のインスタンスのアルファが 100 であれば if (_root[this._name]._alpha == 100) { // 自分自身の名前のインスタンスのアルファを 0 にする _root[this._name]._alpha = 0; // それ以外は } else { // 自分自身の名前のインスタンスのアルファを 100 にする _root[this._name]._alpha = 100; } }; } //- - - - - - - - - - - // リセットボタンの onRelease function を定義 _root.resetButton.onRelease = function() { // 変数 i=0 に 1 ずつ加算して i が 2 になるまでループ for (var i = 0; i<=myButtonNum-1; i++) { // myButton? のアルファを 100 にする _root["myButton"+i]._alpha = 100; } }; ------------------------------------------------ 各インスタンスにインスタンス名を付けるという手間は省けませんが, 各インスタンスにほとんど同じスクリプトを書き続けるという手間は省けます。 インスタンスが100あっても200あっても, 変える部分は最初の行  // myButton の 個数を指定(※可変:ここだけ変える)  var myButtonNum = 3; ここだけです。 1つ1つのボタンに,ほぼ同じ内容のことを書く必要もありませんし, ボタンが増えたからと言って,行数が増えるわけでもありません。 スクリプトの字数が減るのでファイル容量の削減にもなります。 1度目に作るときは勢いで作りますから, インスタンスが100まであっても,グイグイと書き続けられます。 また,1度目に作るときは, プログラムも考えたばかりで何をしているのかわかりますが, しばらくすると自分が書いたプログラムでも何を書いているのかさっぱりわからなくなって,思い出すのに時間がかかります。 そんなとき,このようなスクリプトにしておくと,メンテナンスもしやすいです。 また作成した後に, 「アルファ0では見えなくなるから アルファ20 に変更しよう!」 と考えたときも,このようなスクリプトにしておくと, if文内の  // 自分自身の名前のインスタンスのアルファを 20 にする  _root[this._name]._alpha = 20; この部分を 20 に変えるだけで, 全てのインスタンスの定義が変わります。楽ちんですね。 インスタンスが 100 個とかになって,それぞれにスクリプトを書いていた場合だと書きかえが大変です。 以上, もし余裕があれば,こんな風に楽をする方法を考えてみても良いかもしれないという,余談でした。 ◎関連URL(参考になることがあるかも) 「Flash ActionScript入門ノート フレームアクション」 http://oshige.com/flash/note/archives/2005/02/post_15.html

vita622love
質問者

お礼

あの質問からこんなに丁寧に回答をいただきありがとうございます(涙)。 アクションスクリプトは本当に初心者で、オブジェクト指向???・・・めまい という状態だったのでどうしようかと思っていました。 書いていただいた内容は非常に分かりやすく、かつ的確で、これでできると確信を持ちました。 お礼の言いようもありません。本当にありがとうございました。

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

専門家に質問してみよう