• ベストアンサー

Flash でのダブルクリック禁止

Flash MX Macintoshを使用しています。 あるボタンをクリック-->on (release)すると、 指定したURLへ飛ぶ-->getURL()ようにしています。 パブリッシュしてみると特に問題ないのですが、 あるパソコン初心者に使用してもらったところ、 なんとダブルクリックするじゃありませんか。 ダブルクリックすると、ブラウザが2個起動しました。そしてフリーズしました。 なんとかしてダブルクリックをさせないような スクリプトはあるのでしょうか? マウスのイベントの中にダブルクリックは無いようです。

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

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

ボタンのMC化のやりかたですが、つくったボタンを画面に配置しますよね。そうしたら、そのボタンを選んだまま、「シンボル化」すると、MCになります。べつにボタンの編集画面にする必要はありません。 逆に、なにもえらばず「新規シンボル」を選択し、適当な名前を付けるとシンボル編集画面になりますので、その中にボタンを配置しても同じものが出来ます。ためしにやってみればすぐわかると思います。 「ヒット」などの4フレームは「ボタンの内部」の編集画面ですので、ちがいます。「ボタンをMC化する」というのは、「MCのなかにボタンを置く」ということです。「ボタンのフレームを増やす」ということではありません。 で、MCとボタンのちがいですが、MCにはフレームがあるということと、ボタンにはハンドラアクション (on( )) がある、というのが大きなちがいになりますかね。ほかにもいろいろちがうんですが、ちょっとここでふれるには煩雑になるので。ヘルプを見ていただくのがいいかも。  >MCにもアクションでgetURL();が利く これは誤解なさってるかも‥‥;。前回の回答に書いたことは、「MCの中に置いたボタン」がon(release){getURL‥‥}で反応して、親のMCに命令を出す、ということです。MCにはon( )の命令はないので、今回の場合、すべてMCでつくるのはかなり難しいと思います。 親MC>ボタン という構造になっていても、ボタンはボタンとして作動するんですよ。MCの中にはいっちゃったからボタンがボタンとしての特性を失うわけではないです。MCの中にボタンが置かれているだけです(説明が下手ですみません‥;解説サイトを探してみようとはしたんですが‥) あと、ここから先は今回の目的とは関係のない説明になりますが、 getURLの命令自体はMCにも使えます。ただ、on(release)という命令がMCにはないので、もしMCだけで今回の処理をしたい場合、MCのonClipEventに onClipEvent(mouseDown){ if(this.hitTest(_root._xmouse,_root._ymouse,true)){ getURL("ターゲットhtml"); } } と書いておけば、ボタンの時と同じようにマウスクリックでgetURLを行います。でも面倒ですよ;;マウスがおりたときに画像を変化させたい場合は、またさらにスクリプトをかかなければならないですし(ボタンならdownフレームの絵を変化させるだけで出来ますよね)。 「クリックで何かをさせる」にはボタンが最適で、「複数のフレームを持つ」にはMCが最適です。その両方をあわせ持たせるために、よく「ボタンをMC化」して、クリックに対する命令はボタンに、それ以外の動作についてはMCに書き込んで処理させることがあります。 そうそう、でも#1の回答でも書きましたが、べつにスクリプトをいじらなくても、たぶん今回の問題は、ブラウザから見ればそのままで解決してるんじゃないかと思いますよ?

その他の回答 (2)

回答No.3

こんばんわ,RedCycloneです. 私が使用しているのはFlash5Jですが, MXでも同様かと思いますのでチョットだけアドバイスを. 記事を読んでの推測ですが, meganeさんのFlash構造はBBSやLink,または他のサイトへの移動を 新しいWindowを開いて表示する感じではないでしょうか. 「新しいWindowを開く」こと事態はmeganeさんの思惑通りで, 問題点は”ボタンを押す度に窓が開いてしまうこと”ですね. 結果的なご質問は「ダブルクリックの禁止」のようですが, 本質的には何度クリックしても1つしか新規Windowが開かなければ良いんですよね. ダブルクリックを禁止する方向でこの問題を解決しようとすると難しいです. 何故かと言うと,2つ以上Windowを開かないようにするには, 新しいWindowが開いているかをボタンを押す度に確認しなければならないからです. また,getURL()でウィンドウの名前を指定しても, やはりボタンを押す度に新規Windowが開いてしまいます. さて,問題の解決方法ですが, Javaスクリプトとfscommandを併用するのが一般的かと思います. Javaスクリプトを使用して新しいWindowを開く方法に関しては, 下記サイト「JavaScriptとの連携サンプル」-「Flashのボタンからツールバーのないウィンドウを開く」を参考にして下さい. window.open("URL", "ウィンドウの名前","ウィンドウのプロパティ"); Flashのボタンからこのスクリプトを呼ぶことで, ”ウィンドウの名前”で指定したWindowが無ければ新しくWindowを作成し, あればそのWindowへURLで指定したページを表示します. 上記サイトでは,"ウィンドウの名前"を指定していないので次々にWindowが開きますが, 適当に指定すれば1つしか開かなくなります. わからない部分があれば補足致しますので, その旨ご質問下さい.

参考URL:
http://www.game3rd.com/flash/scripter/
  • hokuto_ds
  • ベストアンサー率45% (106/233)
回答No.1

それきっついですね;;ダブルクリックですか‥‥怖い話です。 マウスハンドラにはダブルクリックの仕様はないですね。(そう言えば、あってもおもしろいのに‥) パブリッシュしたファイルは、実際使用する時って言うのは、まあふつうブラウザから見ますよね(ネットにあげるのが目的だ、という前提で話をさせていただきますが)。その場合、すでにブラウザから見ているので、「あらためてブラウザが起動する」ということはないように思います。 ただ、開くウィンドウを_brankに指定しておくとクリックした数だけウィンドウが開きかねませんので、そこは注意がいるかもしれません。(まあ自分でとじてもらえばいいことですが‥。getURL("ターゲットのファイル","フレームに付けたい名前")で回避できるかな) パブリッシュのswfファイル単独ではなく、ブラウズして、もういちどためしてみることをおすすめします。たぶん大丈夫じゃないんでしょうか。 もし別の理由で「絶対にダブルクリックを防止したい」場合、ボタンをさらにMC(ムービークリップ)化し、1フレーム目はボタンが存在し、2フレーム目にはボタンが存在しない(もしくは、ボタンはあるがon(release)アクションは書いてない)MCにします。1フレに、「this.stop();」を記述しておきます。 で、ボタンのon(release)ハンドラの中に、getURLのほかに this.gotoAndStop(_currentFrame+1)を記述すれば、最初のクリックで次のフレームにすすむため、次のクリックは無効になります。 ただし、このやりかただとこのボタンは二度と作動しなくなりますので、ボタンのアクションに on(rollOut){this.gotoAndStop(1);}を記述するなり、もしくはボタンの親MCの方にタイマーをセットして10秒くらいでもとのフレームにもどすなどの手を打っておきます。まぁタイマーになると、なにもそこまで、って感じもしますが;

megane
質問者

お礼

解答ありがとうございます。 なるほど考えようによっては何でもできますね。 >ボタンをさらにMC化し… ボタンを同じ位置で編集すると、“アップ”“オーバー”“ダウン”“ヒット”の4フレームでてきますが、“ヒット”状態でMCにして、同じ位置で編集し、1・2フレームを使うといった感じでしょうか? 今気づいたことなのですが、 ボタンとMCの違いがはっきりわかりません。 MCにもアクションでgetURL();が利くということは、 全てMCで作ってもよいということですよね。