- ベストアンサー
ドラッグアンドドロップについて(startDrag+stopDrag)
現状のファイルではstartDrag+stopDragにてムービークリップをドラッグアンドドロップ出来るようにしています。 このドラッグの操作感をデフォルトより重い感じにしたいと思っておりますが、どのようにスクリプトで制御していいのかが分からず大変困っております。 ご存じの方がおられましたら大変お手数ですが、ご教授いただければと思います。 何卒、宜しくお願い申し上げます。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#3です。 > イメージ通りの制御が出来ず困っております。 動かす部分に制限をかけると, そう言った色々な諸症状が出ると思いますから, 動かしたあとに 「やっぱやーめた」 するほうが良いと思います。 ---------------------------------------------------- // この MC が表示されたとき onClipEvent (load) { // 重さの変数 weight を設定(変えてください) weight = 10; // ●x座標の最小値 min_x を設定(変えてください) min_x = 100; // ●x座標の最大値 max_x を設定(変えてください) max_x = 300; // ●y座標の最小値 min_y を設定(変えてください) min_y = 50; // ●y座標の最大値 max_y を設定(変えてください) max_y = 350; // クリックしたかどうかの変数 click_flag を false にする click_flag = false; } // この MC を押したとき on (press) { // クリックしたかどうかの変数 click_flag を true にする click_flag = true; // ★押した座標を保存 pos_x = this._xmouse; pos_y = this._ymouse; } // この MC をとにかく放したとき on (release, releaseOutside) { // クリックしたかどうかの変数 click_flag を false にする click_flag = false; } // 1フレーム進む時間毎に随時実行 onClipEvent (enterFrame) { // click_flag が true の時だけ if (click_flag) { // この座標を 1/weight ずつ ★マウス座標-押した座標 に近づける this._x += (_root._xmouse-pos_x-this._x)/weight; this._y += (_root._ymouse-pos_y-this._y)/weight; // ●設定した x座標最小値以下の場合 if (this._x<=min_x) { this._x = min_x; } // ●設定した x座標最大値以上の場合 if (this._x>=max_x) { this._x = max_x; } // ●設定した y座標最小値以下の場合 if (this._y<=min_y) { this._y = min_y; } // ●設定した y座標最大値以上の場合 if (this._y>=max_y) { this._y = max_y; } } } ---------------------------------------------------- ●の付いた行を付け加えました。
その他の回答 (3)
- BlurFiltan
- ベストアンサー率91% (1611/1754)
#2です。 > またこちらの説明不足のようで大変申し訳ございません。 > お詫び申し上げます。 こちらこそすみません。 #1の補足で書かれていらっしゃる内容を理解しておりませんでしたね。 > ドラッグを始めた際のマウスカーソルと > ムービークリップの位置関係が変わることなくドラッグ これは, ムービークリップを押した箇所(座標)をそのときに保存して置いて, 基準点からの差分の位置にムービークリップを近づけるようにするとできます。 と書いてはみましたが, この日本語の意味がわかりにくいですよね。 日本語よりスクリプトを見た方が理解しやすいと思います↓。 --------------------------------------------- // この MC が表示されたとき onClipEvent (load) { // 重さの変数 weight を設定(変えてください) weight = 10; // クリックしたかどうかの変数 click_flag を false にする click_flag = false; } // この MC を押したとき on (press) { // クリックしたかどうかの変数 click_flag を true にする click_flag = true; // ★押した座標を保存 pos_x = this._xmouse; pos_y = this._ymouse; } // この MC をとにかく放したとき on (release, releaseOutside) { // クリックしたかどうかの変数 click_flag を false にする click_flag = false; } // 1フレーム進む時間毎に随時実行 onClipEvent (enterFrame) { // click_flag が true の時だけ if (click_flag) { // この座標を 1/weight ずつ ★マウス座標-押した座標 に近づける this._x += (_root._xmouse-pos_x-this._x)/weight; this._y += (_root._ymouse-pos_y-this._y)/weight; } } ------------------------------------------- ★を付けた2箇所を変更します。
補足
BlurFiltanさま 有り難うございました! 無事イメージしていた動作を再現する事ができました。 度々で大変恐縮なのですが、 下記スクリプトの制御方法をご教授いただけないでしょうか。 this._x += (_root._xmouse-pos_x-this._x)/weight; this._y += (_root._ymouse-pos_y-this._y)/weight; ムービークリップの座標を指定している↑の箇所ですが、 追加でX,Y軸ともに制限をかけてステージ上の一定のエリアでのみドラッグ出来るようにしたいと思っております。 色々と試してみたところエリア外に出た時にムービークリップの動作を止めることが出来たのですが、 再びエリア内のマウスが入ったときにムービークリップ反応がしなかったりとイメージ通りの制御が出来ず困っております。 何度もお願いをしており大変恐れ入りますが、ご教授いただけたら幸いです。 何卒、宜しくお願い申し上げます。
- BlurFiltan
- ベストアンサー率91% (1611/1754)
#1です。 > どのように上記スクリプトを変更すれば良いでしょうか。 普通は変更しません。 ムービークリップを作成する時点で, そのムービークリップの基準点座標を意図して決定しておくものです。 無計画な基準点を設定してしまった場合は, // この座標を 1/weight ずつ マウス座標に近づける this._x += (_root._xmouse+this._width/2-this._x)/weight; this._y += (_root._ymouse+this._height/2-this._y)/weight; のようにして, 差分を算出するしかありません。 Flash は AS が全てではありません。 というか AS なんかは Flash のごく一部の機能です。 補助的に AS を使用するだけで,もっとFlash自体について知っておく必要があると思いますよ。
補足
お返事有り難うございました。 またこちらの説明不足のようで大変申し訳ございません。 お詫び申し上げます。 先ほどの件、補足説明させていただきます。 例として、高さ10px幅200pxのムービークリップ(基準点は中心)をドラッグさせる場合、 ご教授いただいたASではムービークリップの左端にカーソルをあわせてドラッグさせた場合、 カーソルの位置までムービークリックの中心点が移動した後にオブジェクトがドラッグをはじめます。 希望する動きとしてはドラッグを始めた際のマウスカーソルとムービークリップの位置関係が変わることなく ドラッグ出来たらと考えております。 たとえば上記のように横長のムービークリップの左端をつまんでドラッグした場合、 マウスにムービークリップの左端が吸着されたような状態でドラッグできればと思っております。 このような動きをASで再現できればと思っておりますが可能でしょうか。 ご回答いただけましたら幸いです。 何卒、宜しくお願い申し上げます。
- BlurFiltan
- ベストアンサー率91% (1611/1754)
ドラッグするものが MC(ムービークリップ) であるものとして, ご使用の Flash のバージョンが Flash MX 以上である場合, ドラッグする MC 自体に次のように書きます。 ------------------------------------------ // この MC が表示されたとき onClipEvent (load) { // 重さの変数 weight を設定(変えてください) weight = 10; // クリックしたかどうかの変数 click_flag を false にする click_flag = false; } // この MC を押したとき on (press) { // クリックしたかどうかの変数 click_flag を true にする click_flag = true; } // この MC をとにかく放したとき on (release, releaseOutside) { // クリックしたかどうかの変数 click_flag を false にする click_flag = false; } // 1フレーム進む時間毎に随時実行 onClipEvent (enterFrame) { // click_flag が true の時だけ if (click_flag) { // この座標を 1/weight ずつ マウス座標に近づける this._x += (_root._xmouse-this._x)/weight; this._y += (_root._ymouse-this._y)/weight; } } ------------------------------------------ 意味は, // の付いたコメント行に書いてある通りです。
補足
BlurFiltanさま ご回答、誠に有り難うございました! 早速試したところ、イメージしていた動きが再現できました。 本当に有り難うございます! 追加で申し訳ないのですが、一点お聞きしたい事があります。 > // この座標を 1/weight ずつ マウス座標に近づける > this._x += (_root._xmouse-this._x)/weight; > this._y += (_root._ymouse-this._y)/weight; 上記の箇所でムービークリップの位置情報を指定しているかと思いますが、 この内容の場合、ムービークリップのどの箇所をクリックしても ムービークリップの0地点を基準にドラッグが始まります。 ムービークリップ上のクリックを開始した箇所を基準点としてドラッグするには どのように上記スクリプトを変更すれば良いでしょうか。 度々の質問で大変恐れ入りますがご回答いただけましたら幸いです。 何卒、宜しくお願い致します。
お礼
BlurFiltanさま 有り難うございました! イメージ通りの動きが再現できました。 度々の質問にご丁寧にお答えいただき、 有り難うございました。 心よりお礼申し上げます。