(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なら保存して終了。
次は,正しい場所にドラッグ&ドロップされたら正解の音を鳴らしてみます。 次へ