(C)TOSSインターネットランド /教師修行・仕事術/パソコン上達法/HP作成/Flash



ドラッグ&ドロップでぴったり合わせる



山本一美(TOSS福井)

ドラッグ&ドロップした図形を目的の場所にぴったり合わせる方法


サンプルイメージ → fit.swf   fit1.swf(元に戻さない)  fit1a.swf(ドラッグ時の表示変更)
サンプルのソース → fit.fla   fit1.fla(元に戻さない)  fit1a.fla(ドラッグ字の表示変更)

             (表示変更にボタン使用バージョン)
                    サンプルイメージ → fit1b.swf
                    サンプルソース → fit1b.fla

「ファイル」−「新規」 で練習用ファイルを作成し,「名前を付けて保存」で「test3.fla」という名前で
保存する。

1.重ね先(ターゲット)を作る。

・タイムラインパネルで「レイヤー1」をダブルクリックしレイヤー名を「ターゲット」とする。
・ツールボックスの○,□を使って○,□の形を作る。
 (輪郭は黒,塗りの色は薄めの色で)
・それぞれを選択し,右クリック→シンボルの作成でムービークリップに変換。名前はそれぞれ「maru_target」,「sikaku_target」とする。
インスタンス名も同じく「maru_target」,「sikaku_target」とする。
  「ターゲット名」 = 「ピース名+_target」
・「ウィンドウ」−「ライブラリ」でライブラリウィンドウを表示し,今作成したシンボル2つができていることを確認。

2.ピースを作る。

・ライブラリのそれぞれのシンボルを右クリックし,「複製」でコピーを作る。名前はそれぞれ「maru」「sikaku」とする。
・複製して作ったシンボルを右クリックし,「編集」で塗りの色を変更する。(濃い色に)
・ステージの左上「シーン1」をクリックし,シンボルの編集画面から抜ける。
・「ターゲット」レイヤーの上にレイヤーの挿入し,名前を「ピース」レイヤーとする。
・ライブラリからシンボル「maru」「sikaku」をそれぞれドラッグし,ステージ上に配置する。
 このときプロパティパネルでインスタンス名「maru」,「sikaku」とする。
  「ターゲット名」 = 「ピース名+_target」

3.アクションスクリプトを記入する。(function定義)

・ピースレイヤの上にさらにレイヤーを挿入し,「スクリプト」レイヤーとする。
・アクションパネルを開き,スクリプトレイヤーの1フレーム目に以下のスクリプトを記入する。
(それぞれのピースに対するドラッグ開始時の処理,ドロップ時の処理を,ここにまとめて書いておき,それぞれのピースのアクションから呼び出して実行するようにする。こうすることで,処理内容の変更はここだけ変更すればよいので楽である。)

スクリプト  (行頭に // のある行はコメント行)

stop();
//
//★----ドラッグ開始処理関数定義
function myStartDrag(obj){
        obj.startDrag();
        //元の位置を記憶
        oldX = obj._x;
        oldY = obj._y;
}
//
//★----ドロップ時処理関数定義
function myStopDrag(obj){
        var targetName;
        obj.stopDrag();
        //ターゲット名(ターゲット名はピース名+_targetであること)
        targetName = obj._name+"_target";
        //重なり判定,吸着
        if (obj.hitTest(this[targetName]._x,this[targetName]._y,true)){
                obj._x = this[targetName]._x;
                obj._y = this[targetName]._y;
        }
        //ヒットしなかったら元の場所へ戻す ・・・・ ※1
        else if(! obj.hitTest(dai)){
                obj._x = oldX;
                obj._y = oldY;
        }
}


※1 ヒットしなかったときの処理 else if(・・・・・ 以下4行 (対応する } まで)を
   削除すると,元の場所へ戻らず,ドラッグした場所で止まるようになります。
      サンプルイメージ → fit1.swf
      サンプルソース  → fit1.fla

4.それぞれのピースのアクションを設定する。

・それぞれのピースをクリックして選択し,次のアクションスクリプトを記入する。
(それぞれのピースをマウスクリックしたとき,はなしたときに対して 3で定義した機能を呼び出しに行く。)

//このムービークリップがマウスでクリックされたら
//「スクリプト」で定義されたドラッグ開始処理関数を実行する。
on (press) {
        _parent.myStartDrag(this);
}
//ドロップされたら
//「スクリプト」で定義されたドロップ時処理関数を実行する。
on (release) {
        _parent.myStopDrag(this);
}


5.プレビューしてみる。

サンプルイメージ → fit.swf
サンプルのソース → fit.fla


☆ピース数を増やしたい場合は, 1,2,4,をピースの数だけ繰り返します。

OKなら保存して終了。

次は,正しい場所にドラッグ&ドロップされたら正解の音を鳴らしてみます。  次へ



TOPページTOSS福井TOSSインターネットランドご意見・ご感想

Copyright (C) 2003 TOSS福井. All Rights Reserved.