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

いつもお世話になっております。

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;
}
};
------------

A 回答 (2件)

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内のフレームの動きをいつどうすれば良いのかわからなかったので
その点は (?) マークを付けて適当に書きました。
    • good
    • 0
この回答へのお礼

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;
}
};

お礼日時:2010/12/11 23:25

#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 の上のレイヤーに
透明のボタンでも用意してしまったとか。
 
「AS2でカスタムカーサーを使ってMCをド」の回答画像2
    • good
    • 0
この回答へのお礼

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);

お礼日時:2010/12/13 21:49

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