アプリ版:「スタンプのみでお礼する」機能のリリースについて

四角形の端っこをドラッグしたらその四角形を回転させたい。

お世話になります。

Flash Basic 8で作成しております。
大変初歩的なことで申し訳ございませんが、まだ、知識不足で、
私が実現したい事が載っているサイトが見つけれなかったので、
ここで質問させて下さい。

私が、つくりたいFlashは、
(1)四角形があって、四角形をクリックし続けてマウスを移動させたらその四角形が移動
(2)四角形の頂点にマウスがいったら回転マークに変わる
(3)(2)の状態でクリックし続けて、マウスを動かしたらそれに合わせて、四角形が回転する。
を実現したいのです。

(1)については、
 on(Press){ this.startDrag(false);}
on(release){this.stopDrag();}
で実現できたのですが、(2)と(3)がわかりません。

大変申し訳ございませんが教えて頂けないでしょうか?
よろしくお願いします。

A 回答 (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;
};
}
-----------

字数制限いっぱい
「四角形の端っこをドラッグしたらその四角形」の回答画像2
    • good
    • 0

四角形の端っこ(頂点) とは何か。



人間ですらわからないので
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
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!