いつもお世話になっております。
AS2でMCをドラッグするという質問を前回させていただいた際に
適切なご回答を頂いたのですが、今回ドラッグするMC上にカスタムのカーサーを入れようと
すると、ドラッグができなくなってしまいました。
twolargeMC上にマウスをrolloverすると、オリジナルの手のカーサーが現れ、
ドラッグするとカーサーがグーをした手に変わり、更にtwolargeMCのイメージが
ドラッグできるようにしたいです。
どなたかご教授頂けますと幸いです。
カーサーはhandMCと名づけ、MCに直に
onClipEvent (load) {
handMC.startDrag(true);
Mouse.hide();
}を付けました。更にMC内に"image"(手のカーサーイメージ)、"grab"(グーをした手のイメージ)、"none"(何も入れてない)ラベル名を入れました。
現在は下記のスクリプトでオリジナルの手のカーサーだけ表示するのに成功したのですが、ドラッグができず、MouseDownの際にグーをした手のカーサーに変えるスクリプトがいまいち分かりません。
宜しくお願いいたします。
質問番号:6354856
下記のAppleショップのように、拡大イメージを表示した後、
そのイメージをDragでドラッグできるようにし、クリックすると
元の小さいイメージを表示できるようにしたいのですが、うまくいきません。
http://store.apple.com/uk/product/MC596ZM/A?fnod …
標準サイズのイメージをtwoMCとしてFrame20に入れ、Frame25に
拡大イメージ(twolargeMC)を入れました。
Frame20のアクション
twoMC.onRelease = function()
{
gotoAndStop(25);
}
Frame25のアクション
twolargeMC.onPress = function() {
startDrag(this);
}
twolargeMC.onRelease = function() {
gotoAndStop(20);
}
上記で一応イメージはドラッグできますが、マウスを離した途端
標準サイズのイメージになってしまいます。
これをドラッグした後も拡大イメージを表示しつつ、
再度クリックした際に標準サイズのイメージが表示できるようにしたいです。
どなたかご教授いただけますでしょうか。宜しくお願いします。
質問番号:6354856
No.1ベストアンサー20pt
回答者:BlurFiltan 回答日時:2010/12/01 18:51
元の Appleショップ サイトのJSで動くものが
私の環境では(だけ?)ドラッグできないので
したいことが今ひとつ理解しにくいです。。。
(何だか出来の悪いJS...。無理をゴリ押ししてみっともないことになってるApple。)
良くはわかりませんが,
「ドラッグを 『した』か 『していない』か というフラグとなる変数」を作って
それの変数の値を使って判断すれば良いのではないでしょうか。
--- Frame25 のアクション---------------
//ドラッグ 『した』『していない』のフラグをfalseにしておく
var drag_flg:Boolean = false;
//twolargeMCを押したときに実行するメソッドを定義
twolargeMC.onPress = function() {
//twolargeMCをドラッグ開始
startDrag(this);
//
//マウスが動いたときに実行するメソッドを定義
this.onMouseMove = function() {
//ドラッグ 『した』『していない』のフラグをtrueにする
drag_flg = true;
//即 このマウスが動いたときに実行するメソッドを削除
delete this.onMouseMove;
};
};
//twolargeMCを放したときと
//外で放したときに実行するメソッドを定義
twolargeMC.onRelease =
twolargeMC.onReleaseOutside = function () {
//もしドラッグ 『した』『していない』のフラグがfalseの場合
if (!drag_flg) {
gotoAndStop(20);
} else {
//ドラッグ終了
stopDrag();
//ドラッグ 『した』『していない』のフラグをfalseに戻す
drag_flg = false;
}
};
------------
No.1
- 回答日時:
startDrag で同時にドラッグできるムービークリップの数は1つだけなんです。
ですから
> onClipEvent (load) {
> handMC.startDrag(true);
> Mouse.hide();
> }
ここ↑でそれを使ってしまったら
それ以外のものに対して startDrag が使えなくなってしまいます。
またそもそもカーソル(カーサー)をマウスに追従させるのに
普通は startDrag など使いません(意味が違います)。
上のスクリプトは消して,
その handMC が登場するフレーム(_root のフレーム1?)のキーフレームに
次のように書けば良いと思います。
------------------------------------
//本物のマウスカーソル(カーサー)を隠す
Mouse.hide();
//handMC内をimageフレームで止める(?)
handMC.gotoAndStop("image");
//マウスを監視するためのオブジェクトを作成
var mouseObj = new Object();
//マウスが動いたときの動作を定義
mouseObj.onMouseMove = function() {
//handMC(MCの基準点)をマウスの座標にする
handMC._x = _xmouse;
handMC._y = _ymouse;
//表示を即更新
updateAfterEvent();
};
//マウスがダウンされたときの動作を定義
mouseObj.onMouseDown = function() {
//handMC内をgrabフレームで止める(?)
handMC.gotoAndStop("grab");
};
//マウスがアップされたときの動作を定義
mouseObj.onMouseUp = function() {
//handMC内をimageフレームで止める(?)
handMC.gotoAndStop("image");
};
//mouseObjをMouseクラスのリスナーとして登録
Mouse.addListener(mouseObj);
------------------------------------
handMC内のフレームの動きをいつどうすれば良いのかわからなかったので
その点は (?) マークを付けて適当に書きました。
BlurFiltan様、
ご丁寧な回答ありがとうございました。
カーソルは問題なく表示できるようになりました!
ただ、まだ↓のtwolargeMCをマウスドラッグしても、イメージドラッグが
できない状態です。。
ご教授頂けますと幸いです。
宜しくお願いいたします
--- Frame25 のアクション---------------
//ドラッグ 『した』『していない』のフラグをfalseにしておく
var drag_flg:Boolean = false;
//twolargeMCを押したときに実行するメソッドを定義
twolargeMC.onPress = function() {
//twolargeMCをドラッグ開始
startDrag(this);
//
//マウスが動いたときに実行するメソッドを定義
this.onMouseMove = function() {
//ドラッグ 『した』『していない』のフラグをtrueにする
drag_flg = true;
//即 このマウスが動いたときに実行するメソッドを削除
delete this.onMouseMove;
};
};
//twolargeMCを放したときと
//外で放したときに実行するメソッドを定義
twolargeMC.onRelease =
twolargeMC.onReleaseOutside = function () {
//もしドラッグ 『した』『していない』のフラグがfalseの場合
if (!drag_flg) {
gotoAndStop(20);
} else {
//ドラッグ終了
stopDrag();
//ドラッグ 『した』『していない』のフラグをfalseに戻す
drag_flg = false;
}
};
No.2ベストアンサー
- 回答日時:
#1です。
前回のとき(つまりカスタムカーサーを入れる前)は,
「twolargeMC」をドラッグできていて
#1で回答したものを入れた後(つまり#1のカスタムカーサーを入れた後),
「twolargeMC」をドラッグできなくなったということですか?
それは謎ですね。
カーソル(カーサー)のスクリプトとドラッグのスクリプトは
あえて全く無関係にしていますから干渉し合うことはないと思いますが。
また,
実際に作成してみましたがそんなことにはなりませんでしたよ。
原因は他の部分にあるのでしょうね。
つまり
今回も前回も書かれていない箇所が原因でしょう。
以下は単に思いつくまま書くだけですが。
例えば
カーサームービークリップ「handMC」自体に
on(release){…} や
on(press){…} や
on(rollOve){…} などというような
ボタン由来の onイベントハンドラ を書いているとか。
もしくは
ムービークリップ「handMC」が存在するフレームに
handMC.onRelease=function(){…} や
handMC.onPress=function(){…} や
onRollOve=function(){…} などというような
ボタン由来の onイベントハンドラメソッド を書いているとか。
また例えば
ムービークリップで作っていたカーサー「handMC」を
ボタンで作り替えたとか。
また例えば
ドラッグする twolargeMC の上のレイヤーに
透明のボタンでも用意してしまったとか。
BlurFiltan様、
再度ご丁寧なご回答ありがとうございます。
試行錯誤の後、やっとマウスはうまく作動し、ドラッグもできるようになったのですが、
一度ドラッグするのは問題ないのですが、二度目にドラッグを試みると、標準サイズのイメージ(Frame20)
に戻ってしまいます。
これを何度もドラッグできるようにしたいです。
カスタムカーサーを入れる前は、この問題はありませんでした。
例で提案していただいた所を確認し、カーサームービークリップ「handMC」自体に
「onClipEvent (load)」を入れていたので、これをメインフレーム上に入れなおしました。
実は、関係がないと思い触れていなかったのですが、実はtwolargeMCの上に標準サイズイメージと同じサイズのマスクを作成し、そのマスクサイズと同サイズの(ご指摘頂いた通り!)透明のボタン(twolargeBtn)を置いております。
透明のボタンに直に下記のコードを入れていたので、これもメインフレーム上に入れなおしましたが、
それでもやはりドラッグが一度しかできません。。
on (rollOver) {
Mouse.hide();
handMC.gotoAndStop("hand");
}
透明のボタンを上に置いた状態で、ドラッグが問題なく作動できる方法は
ありますでしょうか?
一応下記にフレームに入れた全コードを載せさせていただきます。
是非ご教授頂けますと幸いです。
handMC.onLoad = function () {
gotoAndStop("none");
};
twolargeBtn.onRollOver = function () {
Mouse.hide();
handMC.gotoAndStop("hand");
}
var drag_flg:Boolean = false;
twolargeBtn.onPress = function() {
twolargeMC.startDrag();
updateAfterEvent();
}
this.onMouseMove = function() {
drag_flg = true;
delete this.onMouseMove;
updateAfterEvent();
};
twolargeBtn.onRelease =
twolargeBtn.onReleaseOutside = function () {
if (!drag_flg) {
gotoAndStop(20);
} else {
stopDrag();
updateAfterEvent();
drag_flg = false;
}
};
Mouse.hide();
//マウスを監視するためのオブジェクトを作成
var mouseObj = new Object();
//マウスが動いたときの動作を定義
mouseObj.onMouseMove = function() {
//handMC(MCの基準点)をマウスの座標にする
handMC._x = _xmouse;
handMC._y = _ymouse;
//表示を即更新
updateAfterEvent();
};
//マウスがダウンされたときの動作を定義
mouseObj.onMouseDown = function() {
//handMC内をgrabフレームで止める(?)
handMC.gotoAndStop("grab");
};
//マウスがアップされたときの動作を定義
mouseObj.onMouseUp = function() {
//handMC内をimageフレームで止める(?)
handMC.gotoAndStop("hand");
};
//mouseObjをMouseクラスのリスナーとして登録
Mouse.addListener(mouseObj);
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- Windows 10 タスクバー上に表示されたアドレス・ボックス? 1 2023/04/30 17:37
- その他(コンピューター・テクノロジー) マウスで文章をドラッグしてコピーする際に、横一列全てが選択されるのですが、 2 2023/06/17 18:05
- Excel(エクセル) エクセルのワークシートを簡単に別ファイルにする方法は? 5 2023/01/11 14:50
- Photoshop(フォトショップ) 【Photoshop】画像拡大時に急激に画面外まで拡大してしまうのを制御したい 1 2023/08/25 03:04
- JavaScript スマフォではボタンを表示させたくない 2 2023/01/20 14:26
- Google Drive Googleドライブでのファイルの移動 2 2022/11/01 14:23
- Illustrator(イラストレーター) 「頂点で線分を伸ばす」作業がうまく行かない。 1 2022/09/09 10:19
- デスクトップパソコン PCでファイルを右ドラッグして出てくるメニューの編集方法を教えて下さい 2 2023/01/17 13:31
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
B-SHELL 特定の行を置き換えたい
-
プログラミング、アーキテクチ...
-
YOASOBI
-
マウス自体の移動量の取得
-
FLASHでの色変更
-
PYTHONのtkinterについて
-
マスクにグラデーションをかけ...
-
【VB.NET】別Formのボタンが押...
-
外部ファイルを読み込んでロス...
-
ウインドウハンドルとインスタ...
-
UWSCのBTN関数について。
-
AS3.0 読み込んだ外部テキスト...
-
下記のサイトのTOPページにある...
-
PythonでSetWindowPosを使うに...
-
オブジェクトのランダムな位置表示
-
Photoshopの基本的な参考書を...
-
複数mcのランダム再生とmc指定...
-
ボタンの背景を透過させたいです!
-
FLASHで「かるた」を作りたいの...
-
【ExcelVBA】ファイル名をセル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
AS2をAS3にしたい
-
360度パノラマ写真をループでき...
-
attachMovieについて(長文)
-
photoshopで書いた四角の枠の中...
-
VBAで改行の入ったデータの正規...
-
YOASOBI
-
VBScriptでMsgBoxのYesNoボック...
-
プログラミング、アーキテクチ...
-
python ボタンを押すと複数の関...
-
別のアプリケーションのテキス...
-
テキストボックスの中身をリセ...
-
テキストボックスにセルの値を...
-
五芒星は、悪魔崇拝とどういう...
-
else if文の順序を変えることに...
-
変数に256文字以上のテキストを...
-
RPG(AS400)の本、サイトってあ...
-
PYTHONのtkinterについて
-
Pythonのtkinterについて
-
ダブルクリックと2回クリックの...
-
シンボル化解除の方法
おすすめ情報