• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:四角形の端っこをドラッグしたらその四角形を回転させたい。)

四角形をドラッグして回転させる方法

このQ&Aのポイント
  • Flash Basic 8で四角形をクリックし続けてマウスを移動させると、四角形が移動します。
  • 四角形の頂点にマウスがいくと回転マークに変化し、クリックし続けるとマウスの動きに合わせて四角形が回転します。
  • 具体的な方法については、わかりませんが、おそらくActionScriptを使用して実装することになると思います。

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

  • ベストアンサー
  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.2

#1です _rootのステージ上にインスタンス名 cursor_mc というMC(ムービークリップ)と sq_mc というMCを配置し sq_mc の中にインスタンス名 corner_btn0,corner_btn1,corner_btn2,corner_btn3,sq_btn というボタンを用意した場合 _root の フレーム に書くスクリプト例↓ -------------- //cursor_mcを非表示 cursor_mc._visible = false; //corner_btnを押したかどうかのフラグを用意 press_flg = false; //sq_mc内のsq_btnを押したとき sq_mc.sq_btn.onPress = function() { //sq_mcをドラッグを開始 sq_mc.startDrag(); }; //sq_mc内のsq_btnを放したとき sq_mc.sq_btn.onRelease = sq_mc.sq_btn.onReleaseOutside = function () { //sq_mcのドラッグを終了 sq_mc.stopDrag(); }; //ボタンに関してのループ for (i = 0; i <= 3; i++) { //sq_mc内のcorner_btn○にロールオーバーしたとき sq_mc["corner_btn" + i].onRollOver = function() { //マウスが動いたときの動作を定義 sq_mc.onMouseMove = function() { //本物マウスを非表示 Mouse.hide(); //cursor_mcを表示 cursor_mc._visible = true; //cursor_mcをマウスの座標に移動 cursor_mc._x = _xmouse; cursor_mc._y = _ymouse; //corner_btnを押したかどうかのフラグがtrueであれば if (press_flg) { //sq_mcの基準点からのマウス座標を取得 rx1 = _xmouse - sq_mc._x; ry1 = _ymouse - sq_mc._y; //sq_mcの回転を計算 sq_mc._rotation = (Math.PI / 2 + Math.atan2(ry1, rx1)) * 180 / Math.PI - tr0; } //表示を即更新 updateAfterEvent(); }; }; // //sq_mc内のcorner_btn○を押したとき sq_mc["corner_btn" + i].onPress = function() { //corner_btnを押したかどうかのフラグをtrueにする press_flg = true; //sq_mcの基準点からのマウス座標を取得 rx0 = _xmouse - sq_mc._x; ry0 = _ymouse - sq_mc._y; //sq_mcの基準点とマウスとの距離を算出 td0 = Math.sqrt(rx0 * rx0 + ry0 * ry0); // マウスによる回転の差分を算出 tr0 = (Math.PI / 2 + Math.atan2(ry0, rx0)) * 180 / Math.PI - sq_mc._rotation; }; // //sq_mc内のcorner_btn○を放したとき sq_mc["corner_btn" + i].onRelease = function() { //corner_btnを押したかどうかのフラグをfalseにする press_flg = false; }; // //sq_mc内のcorner_btn○からアウトしたとき sq_mc["corner_btn" + i].onRollOut = sq_mc["corner_btn" + i].onReleaseOutside = function () { //本物マウスを非表 Mouse.show(); //cursor_mcを非表示 cursor_mc._visible = false; //corner_btnを押したかどうかのフラグをfalseにする press_flg = false; //マウスが動いたときの動作を削除 delete sq_mc.onMouseMove; }; } ----------- 字数制限いっぱい

その他の回答 (1)

  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

四角形の端っこ(頂点) とは何か。 人間ですらわからないので PCにはもっとわかりませんね。 もっとも 四角形の端っこ(頂点) を 1px たりとも違わず選択できるものであれば 人間にもPCにも その 端っこ(頂点) とやらが理解できると思います。 現実的にそんなことは無理なので 「その辺がだいたい 端っこ(頂点) だよ」 というのを定義する必要があります。 例えば (あくまでも例えば) 四角形ムービークリップ 内の頂点付近に 透明な○の塗りでも描いて それを ボタン に変換するとか。 そうすれば その 透明な○の塗り を人間が選択できることも可能になると思いますし、 PC だって その 透明な○の塗り のボタンを プレスしたかどうかも PC が判断できます。 四角形の端っこ(頂点) とは何か が 人間的にも PC的にも 定義できたとすれば 回転 などの動作を指示できると思います。 四角形の端っこ(頂点) は関係がありませんが 回転 部分の参考にはなると思います。 「ドラッグ&ドロップ5種」 http://suzupara.iinaa.net/drag.html (説明で使われたり配布されているているものは Adobe(Macromedia) Flash 用のサンプルではありませんが ActionScript 自体は 共通で使えます。) 上記ページの 「王」 や 「飛車」 のように Math.atan2 を使う必要があると思います。 Math.atan2 をもっと深く知るには次のページなどがよろしいかと。 「角度と座標の計算 - Flash の三角関数を使う」 http://kb2.adobe.com/jp/cps/228/228615.html 「Flashゲーム講座&ASサンプル集【狙撃の計算方法について】」 http://hakuhin.jp/as/shot.html