• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:クリックを離したら・・・という処理ができません)

クリックを離したら・・・という処理ができません

このQ&Aのポイント
  • ボタンAを押したり離したりするアクションはon(release)やon(press)で実現できますが、ボタンA外で押したまま移動してボタンA上で離すとon(press)が発動しません。
  • この問題を解決するには、ボタンAの上でクリックを離した時に発動するスクリプトが必要です。
  • ボタンAの上でクリックを離した場合に発動するアクションを実現する方法を教えてください。

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

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

めったに使わない「マニアック&古典的」な技(?)ですが, ひょっとして メニューアイテムトラック で解決することでしょうか↓? 「FLASH学習・技法 ボタン」 http://www17.ocn.ne.jp/~wolves/SCHOOL/lecture/lecG2_5.html メニューアイテムトラック に関しての説明は, 画像 や サンプル などがないとちょっと困難なので, 上記URLなどを参考にしてみてください。 検索しても,ほとんど出ません(50件前後)。 http://www.google.co.jp/search?hl=ja&q=%22%E3%83%A1%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%A2%E3%82%A4%E3%83%86%E3%83%A0%E3%83%88%E3%83%A9%E3%83%83%E3%82%AF%22&lr= (また,メニューアイテムトラック に関しては,  なんと,Flash 8 のヘルプにもありません。  Flash 8 でも使えるのに...。) ///////////////////////////////////////////////// 以下は, メニューアイテムトラック で解決しない場合についての回答です。 まず, ボタンをボタンシンボルのインスタンスとして用意するのではなく, ムービークリップで用意をします。 次にマウスクラスのメソッドを使って, マウスとムービークリップの当たり判定(hitTest)で, 判定をすれば,ご質問で書かれているようなことができます。 --- 具体的な作成例 ------ _root のステージ上に, 適当なムービークリップを作成し,「my_mc」というインスタンス名を付けます。 そして,その「my_mc」が存在する _root のフレームに次のように書けば, 「別の場所でクリックをしてon(release)」 ができます。 ---------------------------------------------- // マウス監視用のオブジェクトを作成 myObj = new Object(); // // マウスアップ時の動作定義 myObj.onMouseUp = function() { // my_m と マウスがヒットしていれば if (_root.my_mc.hitTest(_root._xmouse, _root._ymouse, true)) { trace("my_mc からマウスが放されました"); } }; // // マウスクラスにオブジェクトを登録 Mouse.addListener(myObj); ---------------------------------------------- 「別の場所でクリックをしてon(press)」 の方は少し難しいです。 考えてみましたが,次のようにすれば一応はできます。 同じく「my_mc」が存在する _root のフレームに書くスクリプトです。 ---------------------------------------------- // 変数 flag を初期化 flag = 0; // // マウス監視用のオブジェクトを作成 myObj = new Object(); // // マウスダウン時の動作定義 myObj.onMouseDown = function() { // 変数 flag を 1 にする _root.flag = 1; }; // // マウスアップ時の動作定義 myObj.onMouseUp = function() { // flag を 0 に戻す _root.flag = 0; }; // // マウスを動かしたときの動作定義 myObj.onMouseMove = function() { // my_m と マウスがヒットし かつ 変数 flag が 1 のとき if (_root.my_mc.hitTest(_root._xmouse, _root._ymouse, true) && _root.flag == 1) { trace("my_mc が押されました"); // 変数 flag を 0 に戻す _root.flag = 0; } }; // マウスクラスにオブジェクトを登録 Mouse.addListener(myObj); ---------------------------------------------- trace("my_mc からマウスが放されました"); とか trace("my_mc が押されました"); の部分を実際にする動作に変更してください。 trace(); は, 「制御」→「ムービープレビュー」で出力パネルに,何かを表示させるスクリプトです。 ボタン(この場合ムービークリップ)をクリックするとかしないではなく, マウスクラスのリスナーオブジェクトで, マウスのクリックやムーブを常に監視しておいて, そのマウスの動向によって,動作を変えるという方法です。 MovieClip.onMouseDown ハンドラや, MovieClip.onMouseMove ハンドラなど, ムービークリップクラスのメソッドを使ってもできますが, もし複数のボタン(ムービークリップ)がある場合は, 一括して1つのオブジェクトに監視させる方が良いと思われましたので, マウスクラス を使用する方で書きました。  

tenketu
質問者

お礼

いつもありがとうございます。 実は今簡単なアプリケーションのようなものを作っていて、やろうとしていたことはドラッグアンドドロップ機能の作成だったんですが、おかげさまでイメージどおりのドラッグアンドドロップ機能が実現できました。 「マウス監視用のオブジェクト」というようなテクニックというか概念は自分の中に今までなかったので勉強になりました。 参考HPの紹介もありがとうございます。いろいろあるのでまた後で見てみるとします。

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

関連するQ&A