• ベストアンサー

FlashActionScriptバイブルを読破された方に質問です!2

「引数」で困っております。 本書のp305ページの「theObject」と「this」が私を混乱させます。 p305のスクリプト(その1) this.stop(); function dropYou(theObject){ this.gotoAndStop("open"); theObject.dropped(); } ※このスクリプトには「theObject」が2つ出てきます。引数指定の()内に一つ目のtheObjectは登場します。もう一つは、droppedメソッドの前に登場します。この「theObject」は2つともが同じキーワードであるならば、例えば「obje」でも「book」でも、スクリプトは正常に動作するようです。 ですが、「this」と入れるとさすがにまずいようで、なぜなら、 theObject.dropped(); が、 this.dropped(); になってしまい、オブジェクト参照そのものがこのMCに向けられてしまうからのようです。 しかし、なぜtheObjectがdropped()メソッドのオブジェクト参照として利用することができるのでしょうか?theObjectという名のインスタンスが存在しないので???です。 p305のスクリプト(その2) on (release) { this.stopDrag(); _alpha = 100; eval(_droptarget).dropYou(this); } ここのスクリプトが私を最も苦しめる問題のスクリプトです。 evalが返す値は、MCがドロップされた場所のインスタンス名というのはわかります(_droptargetを使っているから)。 ですが、次の dropYou(this); のthisの使われ方で、もう頭が錯乱してしまいました。 thisとは、オブジェクト参照のときだけに使うものであり、引数で使うものとは思っていなかったからです。 ここのthisがゴミ箱のMCのtheObjectに相当することはわかりますが、なぜ、thisとtheObjectは揃える必要がないのでしょう?? 非常に支離滅裂で分かりにくいこと質問になってしまったかもしれませんが、引数の概念についてアドバイスを御願い致します。

  • shevy
  • お礼率67% (703/1046)

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

  • ベストアンサー
  • hokuto_ds
  • ベストアンサー率45% (106/233)
回答No.3

こんにちは。回答が多少なりとも御役に立てるのも嬉しいですし、こうしてバイブルのことについてお話できるのもなかなか嬉しいです。 特にshevyさんはつくポイントがするどく、私がなにげに流してしまったところもしっかり見てらっしゃるので、たいへん勉強になります。(私もまだまだ勉強中の身ですので‥;) さて >それならば、最初からlevel0.marimoを 入れてコーディングしてしまえばいいのではないか? と思いました。 この考え方は正しいです。マリモとゴミ箱しか存在しないこのサンプルにかぎっていえば、「this」で引数をわたす必要はないんですよね(もっとドラッグする対象の数が増えれば、thisの威力発揮!ですが)。 なのでshevyさんが手を入れたスクリプトも動く「はず」です。 on(release){ this.stopDrag(); eval(_droptarget).dropyou(level0.marimo); ←問題はココ。 } trace(this)の結果は _lecel0.marimo でしたね。dropyou(level0.marimo)の引数のあたまに"_"が抜けてしまっているので、動かないんです。このシンタックスエラーをなおせば動きます。 バイブルの154Pにレベルの概念が出ているので、時間のあるときに読み合わせていただけると、いろいろわかるかと。loadMovieNum()とか使わないとあまり要らない概念ですけど(ふつうの場合は_level0 = _root)いつかはきっと役に立つ‥‥かも。 次ですが、 function dropYou(level0.marimo){ ...}(以下略) これはエラーが出ますね。どうも「.」(ドット)が悪いようです。ドットが入っているものは引数にとれません(当然といえば当然ながら、知らなかった‥今回実験してはじめてわかりました)。それ以外にも「-」などの演算子がはいったもの、半角数字ではじまるものはエラーが出ます(変数やインスタンス名の「名付け」のルールと同じですね)。 で、スクリプトの方の話ですが、引数を固定にしたい場合はこういう書き方をする必要はないですよ。 このスクリプトを動くようにするには、以下のように書き換えます。 function dropYou(){ this.gotoAndStop("open"); _level0.marimo.dropped(); } 具体的には一行目のdropYou()の引数を空欄にします。このファンクションは引数を外から与えられる必要がないので、空欄(引数なし)でいいのです。 あと三行目の_level0.のあたまに「_」をつけて、これで動きます(もちろん_root.marimoでも動きます)。 さらに、ちょっとおまけですが、こういうふうにも動かせます。 namae = _root.marimo function dropYou(){ this.gotoAndStop("open"); namae.dropped(); } "_root.marimo"を"namae"という変数にして動かします。このnamae=_root.marimoのスクリプトを、たとえばフレームごとに変えておくと(たとえばフレーム3ではnamae=_root.usagi にしておくとか‥)同じファンクションでマリモが動いたりウサギ(を置いておけば)が動いたりしてくれますね。 以下は蛇足なのですが、フラッシュ5では「変数」には二種類あります。くわしくはバイブルの72Pから述べられていますが、「ローカル変数」と「グローバル変数」ですね。 で、最大の問題は「ローカル変数はそのファンクションの中のみ」で有効、「グローバル変数はそのMCの中のみ」で有効、ということです。つまりはどちらも「MCの外側に出ていけない」「MCの外側の変数を読むことができない」のです。(MXでは変数のスコープを指定できるので、可能らしい‥あんまりさわってないんですよねえ‥;) で、「MCの外側と変数をやりとりする」方法がファンクションの引数です。これによって、自分の外側にある数値やインスタンス名を引数としてもらったり、自分の内側の変数を相手にあげたりすることができます。 どうも説明が冗長になってしまいましたが、ご参考になれば幸いです。 引数についてバイブル内でいちばんくわしいのは180Pあたりでしょうか。でも私、これでもわからず、はじめたばっかりのころ(実はこの春)プログラムにくわしい身内に「functionとかメソッドのうしろにくっついてる空のカッコ()っていったい何だ!?」とやむなく泣きついたことがあります。意味わからなくて。「オマケだよ」とか言われましたが。 あ、ラーニングアクションスクリプト、本屋で見ました。手ごわそうな本ですね。サンプルが実践的なので、興味があります。もうすこし安いといいのですが‥‥いやいや。いつか読んでみたいです。バイブルのみが頼りの身で、構造型だとスクリプト構成がどういうふうになるのかも興味があるので。

shevy
質問者

お礼

hokuto_dsさん、有難う御座います! お礼が遅れてしまいましたが、今日はかなりアクションスクリプトと格闘しっぱなしの一日でした。 そしてたった今、ほぼ今回の件の問題をクリアーした気分がしましたので、お礼を書けるに至りました。 それでは毎度のことながら、自己解釈論を書きます。 私が大きく勘違いというか、分かっていなかったのが、 functionで定義されるメソッドの引数と、そのfunctionで定義されたメソッドに送る際の引数の意味を混同していたからでした。 言わば、functionで定義されるメソッドにおいて表記される引数の値は、引数ボックスとでも言いましょうか、とにかく、ここにはどんな値でも入れることができるというわけです。その“どんな値”というのが、外部から、このfunctionで定義されたメソッドに送り込んでくる引数というわけですよね。 というわけで、送る側のメソッドは、具体的な値、式を書いてもそれが、functionで定義された引数ボックスに格納されるだけですから、例えば、 eval(_droptarget).dropyou(_root.marimo); と書いても問題ないわけですよね。 ところが、 function dropYou(_level0.marimo){ this.gotoAndStop("open"); _level0.marimo.dropped(); } というのは頂けないわけで、引数とは引数ボックス、要するに変数(みたいなもの?変数なのですかね・・)なので、変数やインスタンス名の名づけのルールに反するのでエラーになるというわけです。 さらに、 _level0.marimo.dropped(); と書いているので、既に_level0.marimoが具体的にそのオブジェクトの場所を指しているので、一行目に引数ボックスは必要なくなるので、 function dropyou(){ で構わなくなるというわけですね! なにやら偉そうに書いてしまいましたが、 自分自身に教えるつもりで書いてみました。。。 また、 namae = _root.marimo function dropYou(){ this.gotoAndStop("open"); namae.dropped(); } というスクリプトでコーディングしてみました。 ちょっと自分で仕上げたスクリプトは、 間違っているような気もしていますが、 このnamaeに異なるパスを挿入するというアイデアは 理解できましたので、なんとか今後に活かせそうです。 >「MCの外側と変数をやりとりする」方法がファンクションの引数です。これによって、自分の外側にある数値やインスタンス名を引数としてもらったり、自分の内側の変数を相手にあげたりすることができます。 なるほど!!大納得です。function内の引数の意味を 理解した上で、hokutoさんが書いてくださった文章を読むと大納得しました。 function侮れず・・・!です。 今日は、本当にとことんスクリプトと向き合ってしまいました。でも楽しいですね。 お礼が送れてしまうことが非常に気掛かりだったのですが、なんとか理解してからお礼するのが礼儀だと思いましたので、お許しください。 本当に有難う御座いました。 また、近い日に、新たな質問をするかもしれませんが、 その際は、またご教授くださいますよう御願いします。 ラーニングなのですが、バイブルを理解しておられるhokutoさんなら、構造型とオブジェクト指向が混ざり合って、混乱するということはないと思いますよ。 私は、バイブルを一通り物にしてから、もう一度ラーニングを読み返してみようというように思っております。

その他の回答 (4)

回答No.5

こんばんわ,RedCycloneです. 横槍かとは思いますが少し補足させて下さい. 関数定義の仕方はご存知の通り次のようになります. function 関数名(引数1,引数2,・・・) { 文 } 関数定義で使用する引数ですが,扱いとしては”ローカル変数”ですね,自分の関数内でのみ有効です.ローカル変数ですから当然”変数”です. 従って,引数は”階層1.階層2.オブジェクト.変数”のような形を取りません.何故ならば,”階層1.階層2.オブジェクト1.変数”この変数はローカル変数ではないからです. 混乱してきたときは最初に戻って学習し直すと良いですね.

shevy
質問者

お礼

回答有難う御座います。 なんとか、今回の質問のもやもやを昇華することができたと自負しております。 >ローカル変数ですから当然”変数”です. 従って,引数は”階層1.階層2.オブジェクト.変数”のような形を取りません. 変数名のルールに反するというわけですよね。 引数は、変数であり、もっと細かく言うと、ローカル変数である、と、これが分かっただけでもかなりの収穫です。 非常に参考になりました。 有難う御座いました!

  • hokuto_ds
  • ベストアンサー率45% (106/233)
回答No.4

ちょっとこの前の回答の「蛇足」について蛇足の補足です; 今回問題になっているスクリプトと「変数」のスコープの話は関係ないです。ただファンクションの「引数」との関連で、うっかり書いただけでして。 要は、ファンクションの「引数」を使うと自分の外側にある変数をもらうことができて便利、とそういう蛇足です。 ‥ほんとに蛇足だった(笑)。

shevy
質問者

お礼

今なら、この蛇足の意味、分かりますよ! 嬉しいです。 >ファンクションの「引数」を使うと自分の外側にある変数をもらうことができて便利 これです、これです、私が言いたかったことは! 私流に言いますと、functionの引数ボックスには、外側にあるどんな変数でも格納できてしまうとでもいいましょうか。 うーん、素晴らしいです!

  • hokuto_ds
  • ベストアンサー率45% (106/233)
回答No.2

こんにちは、shevyさん。 まず最初の問題ですが、 >theObjectという名のインスタンスが存在しないので???です。 これ、インスタンス名ではなくて「変数」みたいなものですよ。 ためしに「a」とかで考えてみると分かりやすい、かもしれません。 このスクリプトは「dropyouファンクションの定義」ですよね。「dropyou」がどんな引数をとってどんな動きをするかを決めているスクリプトです。 この function dropyou(theObject){...} は引数が theObject になってますが、これは「なんでもいい」んです。aでもbでもかわらないです(new とか false とか、スクリプトで使う「予約語」はだめですが)。要は、ファンクションというのは「外から呼ばれるもの」で、その時に「引数」も外から渡されるものです。渡された「引数」を、{...}に記述されたスクリプトの中で処理する時の「とりあえずの名前」が、引数です。この場合はそれが「theObject」だったと。 例でいってみましょう。都合上、このスクリプトが書かれたムービークリップの名前を「test」としておきます。 では、このファンクションを呼んでみます。フレームなりボタンなりに _root.test.dropyou(3); とか _root.test.dropyou(suujidenakutemoii); のように記述して、ファンクションを呼びますよね。この時、ファンクションの中では外から渡された「3」なり「suujidenakutemoii」なりを function dropyou(theObject){.....} の「theObject」に代入して処理します。目には見えませんが、ここではいわば「theObject = 3」とか「theObject = suujidenakutemoii」 という代入式があるようなものです。 話を本文のスクリプトにもどします。 この「function dropyou(theObject)」はゴミ箱のMC中にありますが、ではこのファンクションを「呼ぶ」ほうを見てみましょう。 これはすでに言われたようにマリモのMC(MovieClip)内のボタンに書かれたスクリプト、 on(release){ this.stopDrag(); eval(_droptarget).dropyou(this); } からで、「dropyou(this);」というスクリプトでファンクションが呼ばれていますね。(evalについては理解されているようでよかった。私、最近御世話になってるんですがどうもこいつがいまひとつ使い切れない‥) droptargetの引数、(this)。 これに「なに?」と思ってらっしゃるようですが、それを解決するいちばん早い方法は trace です。このスクリプトの最後に trace(this); って入れてみましょう。結果は _level0.instance1 と出ます。(instance2かも‥置かれた順に名前がつくので) この場合の_level0は「_root」と同じです。instance1は「インスタンスの名前」です。名前をつけてやらないとパレット上では「名前」のところが空白ですが、じつはシステムは勝手に名前を付けていて、置かれた順にinstance1 instance2 と連番でふっていってくれているのです。 ためしに、このインスタンスに marimo と名前を付けてみると、traceの結果は _level0.marimo と出ます。 つまりこの「this」によって参照されるのは、このインスタンスの「絶対パス」なんですね。 dropYou(this);  という命令で、この「_level0.instance1」を引数として相手に渡しています。 では渡されたほう。(もうおわかりかもしれませんが) function dropYou(theObject){ this.gotoAndStop("open"); theObject.dropped(); } の (theObject)には、外から渡された「_level0.instance1」が入ります。 二行目はとばして、三行目にこれを代入すると theObject.dropped(); は _level0.instance1.dropped(); となります。 これを受けて_level0.instance1(マリモ)はfunction dropped(){..}を実行、と相成るのでした。ファンクションのキャッチボール。 n = 0 とかのnがsでもnatubateでもいいように、このtheObjectもなんでもいいです。ファンクションの中でそろってさえいれば、動くということです。 説明が長くてすみません。うまく説明できたかどうかたいへんあやしい。わかりにくかったら補足くださいね。 暑い上に(と、夏のせいにしてみる‥)、なぜか途中で一度説明が消えてしまい(夏のせい?)、ちょっと笑ってしまいました。 しかしthisをこういう形で引数にとるなんて、すっからかんに忘れていました。なんて便利!さすがバイブル、またしっかり読み直したいです。

shevy
質問者

お礼

hokuto_dsさん、回答有難う御座います!! いつもお世話になっております。 今回も私のために時間を割いていただき、本当に感謝しております。 theObjectとthisの意味が掴めました。なるほど、theObjectは変数みたいなものと解釈すれば、すっきり致しました。 そして、 trace(this); なのですが、これまた目からウロコが落ちました。 traceは本当に便利ですね! このtraceのおかげで、ひとまず、私は、 thisが、そのインスタンス自身への絶対パスを指すということがわかりました。 そして・・・、今回も自己解釈で以下のように発展させてみました。 hokuto_dsさんにお付き合いしていただきたく思いますので、御願い致します。 thisとtheObjectがそれぞれ共通して、 level0.marimo (↑一応、MCにはmarimoというインスタンス名をつけたということで以下話をすすめます。) を指しているということですから、 私は、それならば、最初からlevel0.marimoを 入れてコーディングしてしまえばいいのではないか? と思いました。 以下のようにしてみたのです。 on(release){ this.stopDrag(); eval(_droptarget).dropyou(level0.marimo); } と、もう一つ、 function dropYou(level0.marimo){ this.gotoAndStop("open"); level0.marimo.dropped(); } というようにしてみました。しかし、これだとゴミ箱のスクリプトがエラーになってしまいます。引数として、特定のインスタンスを揃えたのに、なぜいけないのでしょう?dropyouの引数にlevel0.marimoという指定そのものがスクリプトのルールを逸脱しているのでしょうか? このようなことが起こるから、thisとtheObjectをわざわざ使わざるをえないのかなとも思うようになっております。 ちなみにlevel0.marimoの代わりに_root.marimoを入れて実験もしてみましたが、駄目でした。 再び長文の質問になってしまいましたが、つまりは、なぜleveo0.marimoという直接指定が駄目なのか、それだけのことですので、どうぞアドバイスを御願い致します。 それにしてもバイブルは読み応えがありますよね。 でも完璧に理解しながら進んでいこうとすると、本当によくこけてしまいます。とほほ・・・。

回答No.1

こんばんわ RedCycloneです. 僕は標記書籍は読んだことがないのでアドバイスの立場でお答えします. 慣れないうちは多少混乱するかも知れませんが少しずつ確実にスキルアップして下さい. >ここのthisがゴミ箱のMCのtheObjectに相当することはわかりますが 呼び出し側で dropYou(this) とすると,呼ばれる関数内で theObject = this となることは理解できるということですね. thisというのは自分自身を表すキーワードで扱い方は他のMCと同様です.逆にthisというキーワードがなければ自分自身を表現できなくなってしまいますよね. >なぜ、thisとtheObjectは揃える必要がないのでしょう?? thisとtheObjectはどちらもmovieClipですから”揃っています”. 呼ぶ側と呼ばれる側で引数の型が揃っていれば問題ありません. (例えば dropYou(10) としたならば10は数値,theObjectはmomovieClipですから正常に動作しません.) 不明な点があればその旨補足下さい.

shevy
質問者

お礼

RedCycloneさん、こんばんは。 回答ありがとうございます!! お世話になっております。 thisの概念、理解できたと思っております。 >呼ぶ側と呼ばれる側で引数の型が揃っていれば問題ありません なるほど!これにはすごく納得しました。 用は引数の型というわけですね。 もうしばらくですが、hokuto_dsさんに本書の細かい点について聞いておりますので、回答を締め切ることが出来ませんことを御了承ください。 本当に有難う御座いました!

関連するQ&A

  • FlashActionScriptバイブルを読破された方に質問です!

    P.258の下の方にあるスクリプト(cd-romのサンプルclipEvent05.flaのスクリプトです。)の使い方、意味の解釈ができなくて、困っております。 わからないのは、 本書の 5行目から9行目までです。 その他の意味は解しております。 //このMovieClipオブジェクトのサイズを、ローカル座標で取得 var theBounds = this.getBounds(this); //その中の値(自分の中心点からのピクセル数)をオフセット xMin -= theBounds.xMin; xMax -= theBounds.xMax; とあるのですが、getBoundsメソッドのあとの引数のthisとは一体何なのでしょう?? また、8,9行目で、なぜ、xMinとxMaxは共に-=しているのでしょうか。 というのもp257のサンプルでは、xMin+=_width/2とxMin-=_width/2というようにあったので・・・。P257のほうの意味は理解しております。ちょっとp257が頭に残ってしまって、何がなんだか分からなくなっております。 getBoundsメソッドの概念がどうしてもつかめません。 そこで、そのメソッドの役目を確認しようと、本書とは関係ない実験をしてみました。 一つのムービーを作成してみました。ムービー上にわざとローカル座標の中心点をずらしたムービークリップを配置して、それにクリップアクションで、 onClipEvent(load){ secret=this.getBounds(); trace(secret); } と書いて、ムービープレビューしてみました。ですが、これで出力に表示されるのは「Type Object」と出るだけでした。getBoundsメソッドはローカル座標を調べてくれるのではないのでしょうか?馬鹿な間違いかもしれませんが、遠慮なくご指摘ください。 ちょっと本書の説明では、ついていけなかったので、 助け舟を出してくださる方がいることを祈っております。 宜しく御願い致します。 また、本書についての質問掲示板等がございましたら、 教えていただけましたら幸いです。

  • メソッドの引数としてのthisの意味

    java初心者です。教えてください。 メソッドの引数としてのthisは何を表しているのですか? いろいろ調べてみてthisには以下の2つの使用法があることがわかりました。 1.インスタンス変数の名前とインスタンスメソッド内のローカル変数名がかぶったときに、メソッド内でインスタンス変数を表すときにthis.変数名とする。 2.あるクラスのコンストラクタ内で、同じクラスの別のコンストラクタを呼ぶときに使う。 しかし、引数としてのthisの意味がわかりません。 具体的には、addMouseListener(this);や、g.drawImage(img,10,10,this);のthisです。 後者の場合はオブジェクトgのインスタンスメソッドなので、thisはオブジェクトgへの参照を表しているのでしょうか?

    • ベストアンサー
    • Java
  • thisキーワードについて確認

    下記の確認事項が正しいかどうか、yesかNoかで判定してくださいましたら幸いです。 確認1:thisは、現在実行中のオブジェクト自身をあらわす参照型変数。 確認2:『インスタンスメソッドやコンストラクタから他のメソッドやメンバ変数を参照する場合、 オブジェクト変数を指定せず参照することができるが、それは、インスタンスメソッド、コンストラクタは現在のオブジェクトを表すthisを持っているため。単純名で参照されているインスタンスメンバは、 実はコンパイラによりthis.単純名に変換されている。 クラスメソッドは個々のオブジェクトに属さないため、メソッド内にthis を持っていないので、thisは使えない。』

    • ベストアンサー
    • Java
  • thisキーワードについて確認

    確認1:thisキーワードは端的に「現在実行中のオブジェクト(インスタンス)自身の参照」ですよね? 確認2:thisキーワードがクラスメソッド内で使用できないのは、「クラスメソッドはオブジェクト(インスタンス)には取り込まれないので、オブジェクトとは無関係なので、そもそも参照自体が無効(参照しようがない)だから」ですか?

    • ベストアンサー
    • Java
  • Flash 着せ替えゲームのアクションスクリプト

    現在Flashを使って着せ替えのゲームを作っています。 人物に洋服をドラッグドロップ吸着し、吸着しないと元に戻るところまではできるのですが、何着も洋服があると人物上で重なってしまいます。 それを、例えば洋服を着ているところに着物をドロップすると洋服が元にある場所に戻るということはできないのでしょうか。 現在のスクリプトはこのような感じです。 人物=mytarget 洋服のボタンのムービークリップのアクション(シーンに置く前) on (press) { this.startDrag(); } on (release, releaseOutside) { this.stopDrag(true); if (_droptarget == "/mytarget") { this._x = eval(_droptarget)._x; this._y = eval(_droptarget)._y; } else { this._x = oldX; this._y = oldY; } } シーン上に置いてある洋服のムービークリップ onClipEvent (load) { oldX = this._x; oldY = this._y; } ご回答出来る方がいらっしゃれば宜しくお願い致します。

  • すべてのMCを1フレーム目へ

    ステージ上にMCのインスタンスが100個あるとします。 ボタンのクリックで全部のMCを1フレーム目へ移動させたいと思っています。 _root.EVENT_btn.onRelease = function() { _root.A_mc.gotoAndStop(1); _root.B_mc.gotoAndStop(1); _root.C_mc.gotoAndStop(1); _root.D_mc.gotoAndStop(1); : : } とひとつずつ書くしかないのでしょうか? ほかに効率のよい書き方はありますか? (注)すべてのインスタンスの親は同一オブジェクトではありません。

    • ベストアンサー
    • Flash
  • thisキーワードについて確認

    確認1:thisは、「オブジェクト(インスタンス)自身の参照」ですか? 質問:何故クラスメソッド内でthisが使えないのですか?

    • ベストアンサー
    • Java
  • 質問

    インスタンス化したboxクラスのtable()メソッドを呼び出し、引数にiを渡す 戻り値としてArrayListオブジェクトで受け取る というのはどのように表すのでしょうか?

  • Flashで、ドラッグしたMCを上に表示&色の変化

    先日、Flashで、ドラッグしたムービークリップ(MC)を常に表示する方法を教えてもらい、 うまく表示することができましたが、今回は、このMCに色を変化させるスクリプトをつけ加えたいので 教えてください(色の変化は、別の質問者の回答を参考にしましたが、うまくいかないので・・・。) 私が作成したいイメージは以下の通り((1)~(3))です。 (1)赤の□のMCが2つ(インスタンス名:「R_mc1」「R_mc2」)と白の□のMCが2つ(インスタンス名:「W_mc1」 「W_mc2」)。 赤のMCはそれぞれMC内の2フレーム目に黄色の□を置いている。 (2)赤の□をドラッグして白の□にふれると、赤の□が黄色の□に変化する。  (R_mc1はW_mc1とふれたときにだけ黄色に変化。R_mc2はW_mc2とふれたときにだけ黄色に変化。) (3)赤の□は、どのMCに重なっても常に上に表示されるようにする。 以下にスクリプトを書いてあります。以下のスクリプトは赤や白のMCが置いてあるフレームに書いてみましたがうまくいきません。教えてgooでいただいた2種類のスクリプトを単純にくっつけただけなので、うまくいかないのは当然だと思いますが・・・。 すみませんが、わかりやすく教えてください。どうぞよろしくお願いいたします。 補足 Flashバージョン CS5.5   アクションスクリプト2.0  FlashPlayer6 です。 //------------------------------------ //深度カウント用変数を用意 var dep_cnt:Number = 1; //変数 i に 1~2 を入れながらループ for (var i:Number = 1; i<=2; i++) { //「R_mc○」押下時に関数 dragMC を実行 this["R_mc"+i].onPress = dragMC; //「R_mc○」を放した時に関数 dropMC を実行 this["R_mc"+i].onRelease = dropMC; //「R_mc○」をMC外で放した時にも関数 dropMC を実行 this["R_mc"+i].onReleaseOutside = dropMC; } //関数 dragMC の定義 function dragMC():Void { //深度カウント用変数をカウントアップ dep_cnt++; //押下されたMCをその深度に移動 this.swapDepths(dep_cnt); //押下されたMCのドラッグを開始 this.startDrag(); } //関数 dropMC の定義 function dropMC():Void { //放されたMCのドラッグを終了 this.stopDrag(); } //------------------------------------ //--------------------------- //「R_mc1」上でマウスダウン時に実行するメソッドを定義 R_mc1.onPress = function():Void { //「R_mc1」のドラッグを開始 R_mc1.startDrag(); //マウスが動く度に関数 watchHitW_mc1R_mc1を実行 this.onMouseMove = watchHitW_mc1R_mc1; }; //「R_mc1」上でマウスアップ時に実行するメソッドを定義 R_mc1.onRelease = R_mc1.onReleaseOutside = function():Void { //このMC(R_mc1)のドラッグを終了 this.stopDrag(); //マウスが動く度に関数 watchHitW_mc1R_mc1 を実行するのを解除 delete this.onMouseMove; } //関数 watchHitW_mc1R_mc1の定義 function watchHitW_mc1R_mc1():Void { //もし「R_mc1」が「W_mc1」にヒットしていれば if (R_mc1.hitTest(W_mc1)) { //「R_mc1」内の再生を フレーム2 で停止 R_mc1.gotoAndStop(2); } else { //ヒットしていなければ「R_mc1」内の再生を フレーム1 で停止 R_mc1.gotoAndStop(1); } } //--------------------------- //「R_mc2」上でマウスダウン時に実行するメソッドを定義 R_mc2.onPress = function():Void { //「R_mc2」のドラッグを開始 R_mc2.startDrag(); //マウスが動く度に関数 watchHitW_mc2R_mc2を実行 this.onMouseMove = watchHitW_mc2R_mc2; }; //「R_mc2」上でマウスアップ時に実行するメソッドを定義 R_mc2.onRelease = R_mc2.onReleaseOutside = function():Void { //このMC(R_mc2)のドラッグを終了 this.stopDrag(); //マウスが動く度に関数 watchHitW_mc2R_mc2 を実行するのを解除 delete this.onMouseMove; } //関数 watchHitW_mc2R_mc2の定義 function watchHitW_mc2R_mc2():Void { //もし「R_mc2」が「W_mc2」にヒットしていれば if (R_mc2.hitTest(W_mc2)) { //「R_mc2」内の再生を フレーム2 で停止 R_mc2.gotoAndStop(2); } else { //ヒットしていなければ「R_mc2」内の再生を フレーム1 で停止 R_mc2.gotoAndStop(1); } }

    • ベストアンサー
    • Flash
  • 外部ファイルを読み込んだMCをドラッグ&ドロップしたいんですが?

    flash(swf)で外部ファイルを読み込んだムービークリップ(MC)をドラッグ&ドロップで移動できるようにしたいんですが、どのようにすればできるでしょうか? 通常のライブラリなどに登録して表示させているMC(インスタンス名:photoL)は以下のようなASで処理できるんですが、外部ファイルを読み込んだMC(インスタンス名:photoF)では同じ書き方をしても表示はするんですが、ドラッグ&ドロップで移動できません。 --------------------------------------------------- photoF.loadMovie("test.jpg"); photoL.onPress = function(){ this.startDrag(false,v_leftLock,v_topLock,v_rightLock,v_bottomLock); }; photoL.onRelease = function(){ this.stopDrag(); }; photoL.onReleaseOutside = function(){ this.stopDrag(); }; photoF.onPress = function(){ this.startDrag(false,v_leftLock,v_topLock,v_rightLock,v_bottomLock); }; photoF.onRelease = function(){ this.stopDrag(); }; photoF.onReleaseOutside = function(){ this.stopDrag(); };

    • ベストアンサー
    • Flash