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

Flashの初心者で、次のことにつまずいています。
初心者のためにわかりやすく教えていただけたら助かります。

複数のムービークリップ(MC)があるとします。
その中のMCの1つをドラッグして他のMCに重なったときに、ドラッグしたMCが常に他のMCの上に表示されるようにしたいのですが・・・。
どのMCをドラッグした場合でも、他のMCの上に表示されるようにしたいです。

Flashのバージョンは、CS5.5で、アクションスクリプト2.0を使用しています。

どうぞよろしくお願いいたします。

「Flashでムービークリップを常に上に表」の質問画像

A 回答 (1件)

Flash CS 5.5 は良いとして


今回のご質問での ActionScript 2.0 とは微妙ですね。。。

普通は
「ActionScript 2.0 を使用→Flash Player 7 以上用 SWF をパブリッシュ」
というのが一般的なのですが
ActionScript 2.0 は場合によって Flash Player 6 でも 動作するのです。

今回質問されているものの場合
ちょうどその境界部分の辺に関係する箇所があって
Flash Player 6 用と Flash Player 7 以上用 SWF とでは
違って来る部分が出て来るので
どう回答すべきか悩むところです。
(具体的には getNextHighestDepth が使えるか使えないかという違いがあります。)

しかしまあ,
字数もそんなに多くはならないと思うので
Flash Player 6 用 SWF をパブリッシュする場合と
Flash Player 7 以上用 SWF をパブリッシュする場合との
両方のスクリプト例を回答することにします。


大雑把に言えば
Flash Player 6 用でも Flash Player 7 以上用でも
どちらにしても一般的によく使われている方法の内容は同じで
マウスプレスした(またはマウスアップした) MC の深度を
その MC が存在する階層での一番上の深度に swapDepths させれば良いわけです。



この説明では
Flash Player 6 用でも 7 以上用でも
どちらにしてもとりあえず
ドラッグする4つのMCに全て違うインスタンス名を付けます。

どれがどれでも良いので
ステージ上のドラッグする4つの MC を1つずつ選択して
プロパティインスペクタより,例えば
「drag_mc0」「drag_mc1」「drag_mc2」「drag_mc3」
というインスタンス名を付けるとします。

その場合の
Flash Player 6 用 SWF をパブリッシュする場合の
4つの MC が存在する タイムライン の "フレーム" に書くスクリプト例です。
(この例では "MC 自体" にはスクリプトは一切書きません。)


 
◎ Flash Player 6 以上用 SWF のスクリプト

//------------------------------------
//深度カウント用変数を用意
var dep_cnt:Number = 0;

//変数 i に 0~3 を入れながらループ
for (var i:Number = 0; i<=3; i++) {
//「drag_mc○」押下時に関数 dragMC を実行
this["drag_mc"+i].onPress = dragMC;
//「drag_mc○」を放した時に関数 dropMC を実行
this["drag_mc"+i].onRelease = dropMC;
//「drag_mc○」をMC外で放した時にも関数 dropMC を実行
this["drag_mc"+i].onReleaseOutside = dropMC;
}

//関数 dragMC の定義
function dragMC():Void {
//深度カウント用変数をカウントアップ
dep_cnt++;
//押下されたMCをその深度に移動
this.swapDepths(dep_cnt);
//押下されたMCのドラッグを開始
this.startDrag();
}

//関数 dropMC の定義
function dropMC():Void {
//放されたMCのドラッグを終了
this.stopDrag();
}
//------------------------------------


 
◎ Flash Player 7 以上用 SWF のスクリプト

//------------------------------------
//変数 i に 0~3 を入れながらループ
for (var i:Number = 0; i<=3; i++) {
//「drag_mc○」押下時に関数 dragMC を実行
this["drag_mc"+i].onPress = dragMC;
//「drag_mc○」を放した時に関数 dropMC を実行
this["drag_mc"+i].onRelease = dropMC;
//「drag_mc○」をMC外で放した時にも関数 dropMC を実行
this["drag_mc"+i].onReleaseOutside = dropMC;
}

//関数 dragMC の定義
function dragMC():Void {
//押下されたMCを最高深度に移動
this.swapDepths(getNextHighestDepth());
//押下されたMCのドラッグを開始
this.startDrag();
}

//関数 dropMC の定義
function dropMC():Void {
//放されたMCのドラッグを終了
this.stopDrag();
}
//------------------------------------


 
上のスクリプト例では2例とも
MCを押した時点で(関数 dragMC 実行時に)
そのMCの深度を最高深度に移動させていますが,
MCを放した時点で(関数 dropMC 実行時に)
そのMCの深度を最高深度に移動させても良いです。



ちなみに
this["drag_mc"+i].onPress = dragMC;
などで使った [ ] を「配列アクセス演算子」と言います。
(名称不明な [ ] では調べようにも検索しにくいですよね。)

「FN0507001-ドット演算子と配列アクセス演算子」
http://www.fumiononaka.com/TechNotes/Flash/FN050 …



その他に関しての詳細などは
例えば「Flash イベントハンドラメソッド」とか
例えば「ActionScript swapDepths」とか
そんな感じのキーワードでGoogleなどで検索してもらうと
色々な情報がわかると思います。
「Flashでムービークリップを常に上に表」の回答画像1
    • good
    • 0
この回答へのお礼

迅速なご回答、本当に本当に感謝いたします。
Flash初心者の私にとってとてもわかりやすく説明していただいたことと
きちんと対応していただいたことに本当に感謝いたします。
早速試してみたいと思います。
本当にありがとうございました。

追伸。BlurFiltanさんは、数多くのご質問に丁寧なご回答をなさっていますね。
   すばらしいお方だと感心しきりです。
   今後ともよろしくお願いいたします。

お礼日時:2013/07/26 20:09

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